+ All Categories
Home > Documents > Today Software Magazine N25/2014

Today Software Magazine N25/2014

Date post: 03-Jun-2018
Category:
Upload: serghei-cebotari
View: 226 times
Download: 0 times
Share this document with a friend
47
TODAY SOFTWARE Nr. 25 • Iulie 2014 • www.todaysoftmag.ro  www.todaysoftmag. com MAGAZINE D Y C B , ă RICAP: ț ă ț ZQ G ș Bă Mș F JSON PSQL D- (GO) ș ăș I T O S S C O A Să (II) OS Principii de design Agile Scrum cu Programare Ex  tremă 
Transcript

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 146

T O D A Y

S O F T WA R E

Nr 25 bull Iulie 2014 bull wwwtodaysoftmagro bull wwwtodaysoftmag com

M A G A Z I N E

D Y C B ă

RICAP ț ă ț

Z QG ș Bă rsquo M ș

F JSON P SQL

D - (GO) ș ă ș

I T O S

S C O A S ă (II)

OS

Principii de design Agile

Scrum cu Programare Ex tremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 246

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 346

6

E IT C -

O Măț

10

RICAP ț ă ț

S U

11

Z Q M C

12

D ț ț ș

A K

14

D Y C B ă

P B

17

IT- O S

19

J 8 ăţ ş ă ăţS D

21

S JSON P SQLR R L

24

D - (GO) șă ș

M C

26

S P E ăA C

29

P AD ț M

34

OS 7

M F

35

I T O SDă ț C ș

37

AOP ș L FR V

40

S O (II)R K

43

G ș Bă rsquo M șF A

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 446

4 nr 25Iulie 2014 | wwwtodaysoftmagro

Ultima noutate locală din Cluj este achiziționarea LiveRail de către Facebook

oate ziarele au publicat această in ormație și sunt convins că deja mulți dintrecititorii revistei știu detaliile despre această tranzacție La ora apariției acestei

știri icircncheiasem deja articolul despreecosistemul de IT Clujean din perspectiva startup-urilor pe care l-am icircncheiat icircntr-o notă de optimism reținut Principalul motiv era lipsaunui succes real ce ar putut dat ca un exemplu Acum icircnsă descoperind LiveRail cao companie a cărei valoare a ost conrmată prin achiziția de către Facebook lucrurilestau mult mai bine cel puțin pe hacircrtie

Rămacircnem tot icircn zona promovării I -ului romacircnesc și icircmi ace plăcere să vă spunicircn premieră despre o a doua ediție a I Days wwwitdaysro 3-4 decembrie 2014 Uneveniment organizat de către oday Sofware Magazine și care pune pe scenă cei mai bunispecialiști locali din zona I -ului Vom avea două secțiuni dedicate prezentărilor tehniceuna dedicată trendurilor și una pentru startup-uri și proiecte universitare Primii invitațicare au acceptat să ni se alăture suntBogdan Iordache - organizator How o Web și co-

ondator echHub Bucharest Jose Dunne - co- ondator Babelverse șiSilviu Dumitrescu- specialist Java și Line Manager Accesa Lista este doar la icircnceput și vom reveni cu detalii

Deoarece este vacanță am pregătit pentru cititorii noștri un concurs alături de HondaCluj Este vorba de posibilitatea de a cacircștiga pe durata unui week-end o mașină pentru odrumeție plus un plin de benzină Extragerea cacircștigătorului va avea loc la evenimentulde lansare a numărului 25 SM

Icircn acest număr veți găsi o serie de articole despre startup-uri Ecosistemul I clujeandin perspectiva startup-urilor vă prezintă elementele principale implicate icircn suportul ide-ilor inovative precum și o listă a celor mai promițătoare startup-uri ZenQ un nou startup vă propune o nouă modalitate de a mulțumi prietenilor Programul RICAP invită startup-urile la un program decoaching iar Fundația Danis prezintă realizările programului deeducație nanciară pentru tinerii antreprenoriDrive your community or betterStudenții

sunt icircn prim plan iar Cluj I Cluster propune o structurare a practicii universitare icircnDespre relevanța practicii studențești recem icircn revistă articolele tehnice din acest număr Java 8 noutăţi şi icircmbunătăţiri

prezintă o parte din noile schimbări din Java 8 care ne vor schimba modul icircn care scriemcod Java Suportul JSON icircn Postgress descrie abordarea inedită adăugată icircn ultima versi-une de PostgressPrincipii de design Agile vă supune atenției o serie dedesign pattern-uricare să se poată adapta arhitectura claselor la principiile Agile

Vă dorim o lectură plăcută

Ovidiu MăţanFondator al Today Sofware Magazine

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

editorial

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 546

5wwwtodaysoftmagro | nr 25Iulie 2014

Redacţia oday Sofware Magazine

Fondator Editor icircn chie Ovidiu Mățan ovidiumatantodaysofmagcom

Editor (startups și interviuri)Marius Mornea mariusmorneatodaysofmagcom

Graphic designerDan Hădărău danhadarautodaysofmagcom

CopyrightCorectorEmilia oma emiliatomatodaysofmagcom

raducătorRoxana Elenaroxanaelenatodaysofmagcom

Reviewer avi Bolog tavibologtodaysofmagcom

ReviewerAdrian Lupei adrianlupeitodaysofmagcom

Contabil Delia Comandeliacomantodaysofmagcom

Produs deoday Sofware Solutions SRL

str Plopilor nr 7577Cluj-Napoca Cluj Romaniacontacttodaysofmagcom

wwwtodaysofmagrowww acebookcomtodaysofmag

twittercomtodaysofmag

ISSN 2284 ndash 6352

Copyright oday Sofware Magazine

Reproducerea parțială sau totală a articolelordin revista oday Sofware Magazine

ără acordul redacției este strict interzisă

wwwtodaysofmagrowwwtodaysofmagcom

Lista autorilor

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

Marius Ciotlosmariusciotlosbetfaircom

Delivery Manager Betfair

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Mihai Fischermihaischergmailcom

iOS developer Densio

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 646

6 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

Ecosistemul IT Clujean din perspectiva startup-urilor

Deși primii pași ăcuți icircn această direcție sunt relativtimizi importanța acordată acestora și susținerea locală sunt icircncreștere Multe dintre evenimentele locale din zona I -ului au osecțiune dedicată startup-urilor Cluj Innovation Days I Days

echsylvania Același trend icircl regăsim chiar și icircn cadrul unor eve-nimente cu caracter mai extins precum Cluj Business Days sau

edX oate acestea arată importanța acordată de comunitatedezvoltării unor produse locale generarea acelui IP (IntellectualProperty) ce o eră local o mai bună stabilitate și un mare potențialde dezvoltare Pentru succesul unui startup icircntr-o piață globalăeste nevoie icircnsă de un icircntreg ecosistem care să ajute creșterea aces-tuia de la idee pacircnă la implementare vizibilitate și prot VictorHwang a denit icircntr-un mod oarte plastic imaginea de ansam-blu Industria clasică de outsourcing poate considerată o ermăicircn care semințele plantate cresc oarte repede au toate aceeașidimensiune excepțiile sunt puține și icircn general nu reprezintă unlucru benec Alternativ icircntr-o pădure semințele plantate deși auo mică șansă de supraviețuire pot ajunge niște copaci masivi care

să existe pentru multă vreme Icircn acest mediu este icircn regulă să daigreș iar acest lucru duce la diversitate icircn opoziție cu erma undetoate semințele trebuie să devină plante mature Icircn ambele exem-ple ceea ce contează cel mai mult este solul icircn care aceste semințecresc și care pentru noi reprezintă ecosistemul Dezvoltarea unorproduse noi icircnseamnă comunicare icircncredere și icircmpărtășireaexperiențelor acumulate

Vom analiza icircn continuare principalii actori ce denesc eco-sistemul de I clujean

Comunitatea ITEste alcătuită icircn majoritatea lor de companii de I ce dezvoltă

produse de outsourcing Există cacircteva excepții locale dintre careaș menționa două aparținacircnd industriei jocurilor Exosyphen șiIdea Studio dar și pe cele ale unor companii mari precum Arobssau Skobbler acum devenit elenav

Un număr important de companii sunt și cele care sunt partedintr-o companie internațională auownership pe produsele dez- voltate și există o divizie locală de RampD Numărul acestora este icircncreștere și putem enumera cacircteva dintre ele precum Bet air Yardi

ora HP Ullink SDL sau GamelofO categorie interesantă o reprezintă companiile care activau pe

piața locală și care au ost achiziționate și care se icircnglobează ast el

icircntr-o piață globală N Data ce a achiziționat EBS Accenture acumpărat Evoline startup-ul Nok a ost luat de Intel sau Skobblerachiziționat de elenav

Din perspectiva dezvoltării personale outsourcing-ul o erăposibilitatea de a lucra la proiecte importante precum și asimila-rea unei părți din cultura clienților a modului acestora de lucru

Din perspectiva mai generală a corporațiilor outsourcing-ul o erăaccesul la o parte din cultura celorlalte corporații comunicareaicircntre di eritele proiecte dar șimeeting -uri cu echipele din di eri-tele colțuri ale lumii

Dacă acum zece ani icircn Cluj exista doar simplă execuție acumavem de-a ace cu unownership din ce icircn ce mai extins Icircn generalarhitectura sistemelor se ace acum local iar product manageri-i șianaliștii de bussines sunt la mare căutare Acest apt icircnseamnă șimultă icircncredere și recunoaștere a calității sofware-ului dezvoltaticircn Cluj iar tendința este de a pune accent pe calitate icircn de avoa-rea costurilor De alt el costurile din ce icircn ce mai ridicate ce sereectă și icircn salariile programatorilor reprezintă și un impedi-

ment important icircn dezvoltarea startup-urilor otodată creeazăacea comoditate aleasă de majoritatea icircn detrimentul icircncercării dedezvoltare a unor produse proprii

Piața desofware locală a ajuns la un prim nivel de maturi-tate Există deja angajați ce au cincisprezece ani de experiențăicircn domeniu dar ponderea acestora este relativ scăzută Piața icircngeneral este tacircnără ără să avem icircncă programatori cărunți Dinperspectiva recrutării există o bătălie continuă pentru atragereatalentelor Din păcate sunt situații icircn care persoane și-au dedicat3-4 ani unui startup pentru a angajate Aceasta poate o pro-blemă dar pe de altă parte asimilarea culturii unei companii și omai bună icircnțelegere a procesului de dezvoltare a produselor poateduce icircn cacircțiva ani spre crearea unui startup cacircștigător

UniversitățileLa cele două universități clujene Babeș-Bolyai și Universitatea

ehnică sunt pregătiți aproximativ 1000 de studenți pentru adeveni programatori Numărul acestora este mic comparativ cunecesitățiile pieței iar acest lucru este observat prin numărul dince icircn ce mai mare de companii care icircși deschid sucursale icircn alteorașe De asemenea se construiesc programe alternative precum42 r sau Ruby Girls

Importanța universităților și rolul lor icircn contextul dezvoltării

ermenul ecosistem din titlul este utilizat ca o meta oră a contextului economic clujean care stabilește relații stracircnse icircntreorganisme precum comunitatea I universități și sursele de nanțare Fiecare dintre acestea comunitatea I prin execuțieuniversitatea prin cercetare iar sursele locale de nanțare prin susținerea primelor două sunt implicate icircn crearea unei rețele

de interdependențe și condiționări Apariția startup-urilor icircn acest ecosistem este interpretată ca un instrument de măsurare a inovațieiși a culturii antreprenoriale

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 746

7wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

startup-urilor locale este relativ scăzut Icircncercăm prin evenimen-tul anual I Days wwwitdaysro și de asemenea prin revista

oday Sofware Magazine să promovăm cunoștiințele și proiectele

realizate de universități Acestea trebuie să se trans orme icircntr-unmotor al inovației și a ultimelor tehnologii similar cu ceea ce aceStand ord pentru Silicon Valley

InvestitoriiInvestițiile principale realizate pacircnă acum icircn zona startup-

urilor au ost reprezentate de către cele două acceleratoare dinBulgaria Eleven și LAUNCHub Cinci startup-uri locale au pri-mit investiții de aproximativ 30000 euro dar din păcate toate au

ost icircnchise Dintre icircnvățămintele pe care le putem valorica dinaceastă abordare le semnalăm pe acelea că banii acordați au ostinsucienți pentru atingerea pragului de a acere protabilă ideal

la un nivel internațional și pe acela că necesitățile proiectelor nuau ost acoperite icircn ceea ce privește partea de development mar-keting sau legal

CrowdsourcingReprezintă o alternativă simplă de nanțare Cele două plat-

orme locale Creștem Idei și Multinanțare nu reușit să atragăpublicul larg icircntr-o măsură mare Proiectele și sumele nanțateast el ind la un nivel redus Recent proiectul Multinanțare a rea-lizat o colaborare cu Universitatea Babeș-Balyai prin crearea unuiportal pentru sprijinirea proiectelor academice

Angel investorsDacă acem o paralelă cu alte centre de dezvoltare o parte din

sumele cu care sunt nanțate inițiativele locale vin de la cei ce aurealizat un exit Putem să icirci enumerăm ast el pe Phillip Kandalunul dintre cei patru ondatori ai Skobbler și pe Daniel Metz celcare a vacircndut compania EBS către N Data Deocamdată cei doinu au anunțat vreo investiție icircn zona de I dar ne așteptăm caacest lucru să se icircntacircmple icircn următorul an

AcceleratoareGemini Solutions Foundry vine cu o abordare di erită

Acceleratorul o eră tot ce este nevoie pentru a aduce startup-ul lastadiul de MVP Aceasta icircnseamnă suport tehnic mentorat suport

legal chiar și spațiu de lucru central icircn București Cluj sau IașiScopul acestui MVP este prezentarea startup-urilor unor marionduri de investiții din SUA icircn vederea obținerii nanțării Icircn

momentul de ață căutările și selecția candidaților este icircn plinădes ășurare

Proiecte socialeO alternativă mai populară icircn special pentru companiile de

I ce activează icircn zona outsourcing-ului și doresc orientarea către

produse o reprezintă proiectele sociale Ast el se realizează un pro-iect gratuit pentru comunitate Un exemplu sugestiv este aplicațiaStatui de daci care promovează lucrarea istoricului LeonardVelcescu

Pe plan local se poate prota de oportunitatea o erită anul vii-tor de Cluj atunci cacircnd acesta va avea titlul de Capitala Europeanăa ineretului

Realizarea unui ast el de proiect va icircnsemna un plus pentrucomunitate dar și un mod simplu de a promova un brand și de atrece prin provocările dezvoltării unui produs

Alte structuri

Cluj IT ClusterEste alcătuit dintr-un grup de companii romacircnești avacircnd

ca scop principal atragerea unor mari proiecte ce nu ar putea realizate de o singură companie Icircn același timp se realizează ocomunicare e icientă icircntre companiile implicate creacircndu-secondițiile pentru o mai bună coordonare mai bună a acțiunilorEvenimentul anual organizat de către cluster Cluj I InnovationDays a adus icircmpreună companiile locale reprezentanți ai guver-nului ai Uniuni Europene precum și proiecte de cercetare Recentrevista oday Sofware Magazine icircmpreună cu Cluj I Cluster amorganizat icircn Brașov evenimentulIT-ul Brașovean Oportunități decolaborare Acesta s-a bucurat de un interes real din partea publi-cului și intenționăm să mai avem ast el de evenimente

StartupWeekendEste un eveniment dedicat 100 creării startup-urilor Dacă

nu ați participat pacircnă acum la un ast el de eveniment vă sugerezsă o aceți Sunt acceptate doar ideile noi iar echipele se ormeazăicircn jurul celor mai populare pitch-uri Este un enomen global șimulte startup-uri au luat naștere icircn elul acesta Cacircștigătorii dinultimi trei ani sunt Mircea Vădan cu plat orma Use ogetherechipa Cloud Copy iar cacircștigătoarea de anul acesta a ost o vechecolaboratoare a revistei Antonia Onaca cu o idee ce ar trebui săschimbe modul icircn care sunt evaluați angajații

Hackaton-ul Techsylvania Organizat icircn cadrul primei ediții a echsylvania acesta a pus

la dispoziția participanților diverse dispozitive mobile precumGoogle Glasses Leap Motion Sphero Little Printer Pebble și

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 846

8 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

multe altele Rezultatul a ost spectaculos miniproiectele reali-zate ind cu adevărat interesante Acestea au combinat olosireaGoogle Glasses icircmpreună cu Leap Motion pentru realizarea unui joc sau tastarea unui cod la bancomat prin monitorizarea mișcăriiochilor Probabil o combinație de Startup Weekend și hackaton icircncare sunt puse la dispoziție ultimele gadget-uri disponibile ar ducela crearea unor startup-uri cu adevărat inovative

Today Software Magazine și IT DaysUnul dintre scopurile declarate icircncă de la lansarea revistei a

ost sprijinirea startup-urilor Revista oday Sofware Magazinesprijină majoritatea inițiativelor din această zonă și ajutăm la pro-movarea acestora De asemenea prin evenimentul anual I Daysce va avea loc icircn 3-4 decembrie anul acesta vom aduce pe scenăcele mai importante startup-uri locale

ConcluziiFenomenul startup-urilor și orientarea companiilor ce

activează icircn zona outsourcing spre crearea de produse sunt icircn

continuă creștere Deși nu putem da un exemplu de succes realne așteptăm să putem ace acest lucru icircn curacircnd Mă bucur săputem da un exemplu real compania ondată de doi clujeni și unamerican LiveRail a ost recent achiziționată de către FacebookAceasta demonstrează ără echivoc valoarea ecosistemului localși a educației

S atul pe care icircl dăm celor ce vor să icircși creeze un startup estesă participe la cacirct de multe evenimente locale și internaționalerelațiile personale iind oarte importante la icircnceput de drumEste puțin probabil că ideea ta va schimba lumea macircine dacă nuinteracționezi cu multă lume

Există multe oportunități pe care le remarcăm mai ales icircn

aptul că programatorii vor din ce icircn ce mai mult să icircși creeze pro-dusele proprii iar acceleratoarele locale icircncep să icircși acă simțităprezența Prin produsele dezvoltate icircn outsourcing sau parte dintr-o mare corporație s-a demonstrat aptul că tehnic putem realizaorice din păcate din cauza condențialității majoritatea dintreele nu pot ăcute publice Universitățile devin din ce icircn ce maideschise icircn comunicarea cu specialiștii ce nu sunt parte a lumiiacademice și sperăm să vedem icircn curacircnd mai multe cursuri despreantreprenoriat și de ce nu chiar un accelerator pentru studenți icircncare practica și cercetarea se reunesc

Startup-uri clujeneIcircn continuare vă propun o listă de startup-uri locale ce merită

să e urmărite Mulțumesc lui Mircea Vădan și lui Marius Morneapentru realizarea acesteia Icircn numerele următoare vom reveni cuun in ograc

Squirrly 1 - Este un plugin SEO de wordpress Compania a osticircnințată de către Florin Mureșan și se bucură deja de un numărmare de clienți De asemenea este sprinjinit de către PhillipKandal co- ondator Skobbler

HackaServer2 și C F3653 - un vechi startup clujean condus decătre Marius Coracircci și Marius Chiș Acesta se adreseazăhacker -ilor ce doresc o provocare legală și administratorilor de sisteme cedoresc o icircmbunătățire a securității printr-o testarea reală

HipMenu4

- este o aplicație ce se adresează celor ce vor1 httpwwwsquirrlyco

2 httphackaservercom

3 httpct 365com

4 httpswwwhipmenuro

să comande macircncare la birou sau acasă Marius Mocian unsusținător local a startup-urilor este parte din această echipă

Evolso5 - un startup pornit de către Alin Stănescu și este acumparte din programul de accelerare de la StartupYard

Mira Rehub6 - unul dintre cele mai promițătoare startup-urilocale Au realizat un sistem de recuperare a celor cu problemelocomotorii olosind senzorul Kinect

Mockups7 - implementeză creearea demockup-uri online avacircnd o bază mare de useri online

5 httpwwwevolsocom

6 httpwwwmirarehabcom

7 httpsmoqupscom

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Ecosistemul IT Clujean din perspectiva startup-urilor

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 946

9wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1046

10 nr 25Iulie 2014 | wwwtodaysoftmagro

RICAP a luat naștere din dorința de

a o eri resurse inovatorilor din Romacircniapentru a ieși pe piețe internaționale cu pro-dusele lor e că este vorba despre energiebio-tehnologii agricultură IC sau oricealt domeniu tehnologic RICAP este ast elprimul program din Romacircnia care sprijinăinovatorii și antreprenorii cu tehnologiiinovatoare să le comercializeze pe piața glo-bală acilitacircnd drumul din laborator cătrepiață Icircn acest e ort programul se bazeazăpe un parteneriat internațional cu unuldintre cele mai importante institute din

SUA care sprijină comercializarea inovării-Larta Institute pe legăturile internaționaleși know-how-ul acestei rețele precum și perețeaua de mentori pe care o consolidăm lanivel local

bdquoCacircnd se vorbește despre problemelebusiness-urilor și startup-urilor eu spun de ecare dată că și banii sunt o parte a pro-blemei dar cea mai importantă problemăeste lipsa de know-how() Experiența pecare am avut-o icircn programul RICAP a osticircn primul racircnd o experiență de coachingDe-asta am și intrat asta am căutat unmediu care să mă icircncurajeze să studiez eudupă programul pe care icircl voiam eu după prioritățile pe care consideram că le avemși să atacăm problemele pas cu pas rdquo DanielHomorodean director Arxia antreprenorparticipant icircn program

Aplicațiile se aconline pacircnă pe 31 iulie2014 direct pesite-ul programuluiwwwricapro

Ce s-a icircntacircmplat pacircnă acumPrima ediție a RICAP a avut loc icircn peri-

oada ianuarie ndash mai 2014 Icircn acest timp15inovatoriau lucrat alături de o echipă dedi-cată dementori și advisoriextraordinariicircntr-un program de mentorat personalizat

pentru a dezvolta și implementainstru-

mente de comercializare strategii deintrare pe piață strategii de comerciali-zare prezentări pentru clienți Icircn uncțiede nivelul de dezvoltare al companiilorprogramul a acilitat peste 30 de legă-turi strategice cu posibili parteneri șinanțatori din SUA și din Europa inclu-siv membri ai Fortune 1000 din IndustryAdvisory Board-ul Larta partenerul ameri-can al programului Icircn plus două companiiau ost icircn Statele Unite unde au beneciatde aproximativ 15 icircntacirclniri de business cu

posibili parteneri și nanțatoriExperiența a ost di erită pentru cei 15participanți

ldquoAcest program se poate adapta la nevo-ile participanților oriunde v-ați a la icircnspectrul de la pur om de știință pacircnă la omde businessrdquo Alexandru Floareș SAIA șiOnco Predict om de știinta și antreprenorparticipant la RICAP

La icircnceputul lunii iunie am lansat adoua ediție RICAP icircn cadrul căreia am avutevenimente și icircntacirclniri icircn mai multe orașeale țării Am avut ocazia să cunoașteminovatori pasionați și cu viziune care audezvoltat produse incredibile

Icircntacirclnirile cu toți acești oameni șidiscuțiile vibrante pe care le-am avut cumulți dintre ei ne-au validat că ceea ce

acem la RICAP le poate o eri un sprijinreal atacirct lor cacirct și utilizatorilor produselorlor

Un rol cheie icircn prima ediție RICAPl-au avut alături de inovatorii selectați icircn

program mentorii romacircni care le-au ostalături și i-au sprijinit icircn denirea viziuniiși strategiei de comercializare și nu numai

I-am avut alături de noi pe Andrei

Pitiș pro esor antreprenorbusiness angel

și neobosit susținător al ecosistemului ino- vării și al start-up-urilortech din Romacircniape Norina Boru antreprenor și consultantcu o vastă experiență icircn domeniul medicaldin Romacircnia și la nivel internațional Deasemenea icirci menționăm pe Alex MirceaDascălu un antrepenor și consultant cuexperiență internațională și pe SandaFoameteeducation lead la Microsof

Mai multe despre mentori cacirct și despreinovatorii care au participat la prima edițeRICAP puteți citi pewwwricaproblog

Cine suntemRICAP este rezultatul unui par-

teneriat icircntre Centrul Romacircn pentruInovație icircn Dezvoltare Locală (CRIDL)și Institutul Larta localizat icircn LosAngeles SUA Programul este nanțat deRomanian-American Foundation (RAF) șiimplementat cu sprijinul GEA Strategy ampConsulting RICAP construiește pe rețeauainternațională și expertiza acumulatătimp de 20 de ani de Larta Institute prinsusținerea a circa 9700 de inovatori din 17țări

Contactwwwricapro | wwwricaproblog |

FacebookLinkedIn RICAP - Innovationrom lab to market | contactricapro

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

eveniment

RICAP drumul inovației de la laborator către piețe glob

La icircnceputul lunii iunie s-au lansat aplicațiile pentru cea de-a doua ediție a Programului de Asistență icircn Comercializarea Inovăriidin Romacircnia (RICAP)

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 246

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 346

6

E IT C -

O Măț

10

RICAP ț ă ț

S U

11

Z Q M C

12

D ț ț ș

A K

14

D Y C B ă

P B

17

IT- O S

19

J 8 ăţ ş ă ăţS D

21

S JSON P SQLR R L

24

D - (GO) șă ș

M C

26

S P E ăA C

29

P AD ț M

34

OS 7

M F

35

I T O SDă ț C ș

37

AOP ș L FR V

40

S O (II)R K

43

G ș Bă rsquo M șF A

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 446

4 nr 25Iulie 2014 | wwwtodaysoftmagro

Ultima noutate locală din Cluj este achiziționarea LiveRail de către Facebook

oate ziarele au publicat această in ormație și sunt convins că deja mulți dintrecititorii revistei știu detaliile despre această tranzacție La ora apariției acestei

știri icircncheiasem deja articolul despreecosistemul de IT Clujean din perspectiva startup-urilor pe care l-am icircncheiat icircntr-o notă de optimism reținut Principalul motiv era lipsaunui succes real ce ar putut dat ca un exemplu Acum icircnsă descoperind LiveRail cao companie a cărei valoare a ost conrmată prin achiziția de către Facebook lucrurilestau mult mai bine cel puțin pe hacircrtie

Rămacircnem tot icircn zona promovării I -ului romacircnesc și icircmi ace plăcere să vă spunicircn premieră despre o a doua ediție a I Days wwwitdaysro 3-4 decembrie 2014 Uneveniment organizat de către oday Sofware Magazine și care pune pe scenă cei mai bunispecialiști locali din zona I -ului Vom avea două secțiuni dedicate prezentărilor tehniceuna dedicată trendurilor și una pentru startup-uri și proiecte universitare Primii invitațicare au acceptat să ni se alăture suntBogdan Iordache - organizator How o Web și co-

ondator echHub Bucharest Jose Dunne - co- ondator Babelverse șiSilviu Dumitrescu- specialist Java și Line Manager Accesa Lista este doar la icircnceput și vom reveni cu detalii

Deoarece este vacanță am pregătit pentru cititorii noștri un concurs alături de HondaCluj Este vorba de posibilitatea de a cacircștiga pe durata unui week-end o mașină pentru odrumeție plus un plin de benzină Extragerea cacircștigătorului va avea loc la evenimentulde lansare a numărului 25 SM

Icircn acest număr veți găsi o serie de articole despre startup-uri Ecosistemul I clujeandin perspectiva startup-urilor vă prezintă elementele principale implicate icircn suportul ide-ilor inovative precum și o listă a celor mai promițătoare startup-uri ZenQ un nou startup vă propune o nouă modalitate de a mulțumi prietenilor Programul RICAP invită startup-urile la un program decoaching iar Fundația Danis prezintă realizările programului deeducație nanciară pentru tinerii antreprenoriDrive your community or betterStudenții

sunt icircn prim plan iar Cluj I Cluster propune o structurare a practicii universitare icircnDespre relevanța practicii studențești recem icircn revistă articolele tehnice din acest număr Java 8 noutăţi şi icircmbunătăţiri

prezintă o parte din noile schimbări din Java 8 care ne vor schimba modul icircn care scriemcod Java Suportul JSON icircn Postgress descrie abordarea inedită adăugată icircn ultima versi-une de PostgressPrincipii de design Agile vă supune atenției o serie dedesign pattern-uricare să se poată adapta arhitectura claselor la principiile Agile

Vă dorim o lectură plăcută

Ovidiu MăţanFondator al Today Sofware Magazine

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

editorial

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 546

5wwwtodaysoftmagro | nr 25Iulie 2014

Redacţia oday Sofware Magazine

Fondator Editor icircn chie Ovidiu Mățan ovidiumatantodaysofmagcom

Editor (startups și interviuri)Marius Mornea mariusmorneatodaysofmagcom

Graphic designerDan Hădărău danhadarautodaysofmagcom

CopyrightCorectorEmilia oma emiliatomatodaysofmagcom

raducătorRoxana Elenaroxanaelenatodaysofmagcom

Reviewer avi Bolog tavibologtodaysofmagcom

ReviewerAdrian Lupei adrianlupeitodaysofmagcom

Contabil Delia Comandeliacomantodaysofmagcom

Produs deoday Sofware Solutions SRL

str Plopilor nr 7577Cluj-Napoca Cluj Romaniacontacttodaysofmagcom

wwwtodaysofmagrowww acebookcomtodaysofmag

twittercomtodaysofmag

ISSN 2284 ndash 6352

Copyright oday Sofware Magazine

Reproducerea parțială sau totală a articolelordin revista oday Sofware Magazine

ără acordul redacției este strict interzisă

wwwtodaysofmagrowwwtodaysofmagcom

Lista autorilor

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

Marius Ciotlosmariusciotlosbetfaircom

Delivery Manager Betfair

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Mihai Fischermihaischergmailcom

iOS developer Densio

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 646

6 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

Ecosistemul IT Clujean din perspectiva startup-urilor

Deși primii pași ăcuți icircn această direcție sunt relativtimizi importanța acordată acestora și susținerea locală sunt icircncreștere Multe dintre evenimentele locale din zona I -ului au osecțiune dedicată startup-urilor Cluj Innovation Days I Days

echsylvania Același trend icircl regăsim chiar și icircn cadrul unor eve-nimente cu caracter mai extins precum Cluj Business Days sau

edX oate acestea arată importanța acordată de comunitatedezvoltării unor produse locale generarea acelui IP (IntellectualProperty) ce o eră local o mai bună stabilitate și un mare potențialde dezvoltare Pentru succesul unui startup icircntr-o piață globalăeste nevoie icircnsă de un icircntreg ecosistem care să ajute creșterea aces-tuia de la idee pacircnă la implementare vizibilitate și prot VictorHwang a denit icircntr-un mod oarte plastic imaginea de ansam-blu Industria clasică de outsourcing poate considerată o ermăicircn care semințele plantate cresc oarte repede au toate aceeașidimensiune excepțiile sunt puține și icircn general nu reprezintă unlucru benec Alternativ icircntr-o pădure semințele plantate deși auo mică șansă de supraviețuire pot ajunge niște copaci masivi care

să existe pentru multă vreme Icircn acest mediu este icircn regulă să daigreș iar acest lucru duce la diversitate icircn opoziție cu erma undetoate semințele trebuie să devină plante mature Icircn ambele exem-ple ceea ce contează cel mai mult este solul icircn care aceste semințecresc și care pentru noi reprezintă ecosistemul Dezvoltarea unorproduse noi icircnseamnă comunicare icircncredere și icircmpărtășireaexperiențelor acumulate

Vom analiza icircn continuare principalii actori ce denesc eco-sistemul de I clujean

Comunitatea ITEste alcătuită icircn majoritatea lor de companii de I ce dezvoltă

produse de outsourcing Există cacircteva excepții locale dintre careaș menționa două aparținacircnd industriei jocurilor Exosyphen șiIdea Studio dar și pe cele ale unor companii mari precum Arobssau Skobbler acum devenit elenav

Un număr important de companii sunt și cele care sunt partedintr-o companie internațională auownership pe produsele dez- voltate și există o divizie locală de RampD Numărul acestora este icircncreștere și putem enumera cacircteva dintre ele precum Bet air Yardi

ora HP Ullink SDL sau GamelofO categorie interesantă o reprezintă companiile care activau pe

piața locală și care au ost achiziționate și care se icircnglobează ast el

icircntr-o piață globală N Data ce a achiziționat EBS Accenture acumpărat Evoline startup-ul Nok a ost luat de Intel sau Skobblerachiziționat de elenav

Din perspectiva dezvoltării personale outsourcing-ul o erăposibilitatea de a lucra la proiecte importante precum și asimila-rea unei părți din cultura clienților a modului acestora de lucru

Din perspectiva mai generală a corporațiilor outsourcing-ul o erăaccesul la o parte din cultura celorlalte corporații comunicareaicircntre di eritele proiecte dar șimeeting -uri cu echipele din di eri-tele colțuri ale lumii

Dacă acum zece ani icircn Cluj exista doar simplă execuție acumavem de-a ace cu unownership din ce icircn ce mai extins Icircn generalarhitectura sistemelor se ace acum local iar product manageri-i șianaliștii de bussines sunt la mare căutare Acest apt icircnseamnă șimultă icircncredere și recunoaștere a calității sofware-ului dezvoltaticircn Cluj iar tendința este de a pune accent pe calitate icircn de avoa-rea costurilor De alt el costurile din ce icircn ce mai ridicate ce sereectă și icircn salariile programatorilor reprezintă și un impedi-

ment important icircn dezvoltarea startup-urilor otodată creeazăacea comoditate aleasă de majoritatea icircn detrimentul icircncercării dedezvoltare a unor produse proprii

Piața desofware locală a ajuns la un prim nivel de maturi-tate Există deja angajați ce au cincisprezece ani de experiențăicircn domeniu dar ponderea acestora este relativ scăzută Piața icircngeneral este tacircnără ără să avem icircncă programatori cărunți Dinperspectiva recrutării există o bătălie continuă pentru atragereatalentelor Din păcate sunt situații icircn care persoane și-au dedicat3-4 ani unui startup pentru a angajate Aceasta poate o pro-blemă dar pe de altă parte asimilarea culturii unei companii și omai bună icircnțelegere a procesului de dezvoltare a produselor poateduce icircn cacircțiva ani spre crearea unui startup cacircștigător

UniversitățileLa cele două universități clujene Babeș-Bolyai și Universitatea

ehnică sunt pregătiți aproximativ 1000 de studenți pentru adeveni programatori Numărul acestora este mic comparativ cunecesitățiile pieței iar acest lucru este observat prin numărul dince icircn ce mai mare de companii care icircși deschid sucursale icircn alteorașe De asemenea se construiesc programe alternative precum42 r sau Ruby Girls

Importanța universităților și rolul lor icircn contextul dezvoltării

ermenul ecosistem din titlul este utilizat ca o meta oră a contextului economic clujean care stabilește relații stracircnse icircntreorganisme precum comunitatea I universități și sursele de nanțare Fiecare dintre acestea comunitatea I prin execuțieuniversitatea prin cercetare iar sursele locale de nanțare prin susținerea primelor două sunt implicate icircn crearea unei rețele

de interdependențe și condiționări Apariția startup-urilor icircn acest ecosistem este interpretată ca un instrument de măsurare a inovațieiși a culturii antreprenoriale

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 746

7wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

startup-urilor locale este relativ scăzut Icircncercăm prin evenimen-tul anual I Days wwwitdaysro și de asemenea prin revista

oday Sofware Magazine să promovăm cunoștiințele și proiectele

realizate de universități Acestea trebuie să se trans orme icircntr-unmotor al inovației și a ultimelor tehnologii similar cu ceea ce aceStand ord pentru Silicon Valley

InvestitoriiInvestițiile principale realizate pacircnă acum icircn zona startup-

urilor au ost reprezentate de către cele două acceleratoare dinBulgaria Eleven și LAUNCHub Cinci startup-uri locale au pri-mit investiții de aproximativ 30000 euro dar din păcate toate au

ost icircnchise Dintre icircnvățămintele pe care le putem valorica dinaceastă abordare le semnalăm pe acelea că banii acordați au ostinsucienți pentru atingerea pragului de a acere protabilă ideal

la un nivel internațional și pe acela că necesitățile proiectelor nuau ost acoperite icircn ceea ce privește partea de development mar-keting sau legal

CrowdsourcingReprezintă o alternativă simplă de nanțare Cele două plat-

orme locale Creștem Idei și Multinanțare nu reușit să atragăpublicul larg icircntr-o măsură mare Proiectele și sumele nanțateast el ind la un nivel redus Recent proiectul Multinanțare a rea-lizat o colaborare cu Universitatea Babeș-Balyai prin crearea unuiportal pentru sprijinirea proiectelor academice

Angel investorsDacă acem o paralelă cu alte centre de dezvoltare o parte din

sumele cu care sunt nanțate inițiativele locale vin de la cei ce aurealizat un exit Putem să icirci enumerăm ast el pe Phillip Kandalunul dintre cei patru ondatori ai Skobbler și pe Daniel Metz celcare a vacircndut compania EBS către N Data Deocamdată cei doinu au anunțat vreo investiție icircn zona de I dar ne așteptăm caacest lucru să se icircntacircmple icircn următorul an

AcceleratoareGemini Solutions Foundry vine cu o abordare di erită

Acceleratorul o eră tot ce este nevoie pentru a aduce startup-ul lastadiul de MVP Aceasta icircnseamnă suport tehnic mentorat suport

legal chiar și spațiu de lucru central icircn București Cluj sau IașiScopul acestui MVP este prezentarea startup-urilor unor marionduri de investiții din SUA icircn vederea obținerii nanțării Icircn

momentul de ață căutările și selecția candidaților este icircn plinădes ășurare

Proiecte socialeO alternativă mai populară icircn special pentru companiile de

I ce activează icircn zona outsourcing-ului și doresc orientarea către

produse o reprezintă proiectele sociale Ast el se realizează un pro-iect gratuit pentru comunitate Un exemplu sugestiv este aplicațiaStatui de daci care promovează lucrarea istoricului LeonardVelcescu

Pe plan local se poate prota de oportunitatea o erită anul vii-tor de Cluj atunci cacircnd acesta va avea titlul de Capitala Europeanăa ineretului

Realizarea unui ast el de proiect va icircnsemna un plus pentrucomunitate dar și un mod simplu de a promova un brand și de atrece prin provocările dezvoltării unui produs

Alte structuri

Cluj IT ClusterEste alcătuit dintr-un grup de companii romacircnești avacircnd

ca scop principal atragerea unor mari proiecte ce nu ar putea realizate de o singură companie Icircn același timp se realizează ocomunicare e icientă icircntre companiile implicate creacircndu-secondițiile pentru o mai bună coordonare mai bună a acțiunilorEvenimentul anual organizat de către cluster Cluj I InnovationDays a adus icircmpreună companiile locale reprezentanți ai guver-nului ai Uniuni Europene precum și proiecte de cercetare Recentrevista oday Sofware Magazine icircmpreună cu Cluj I Cluster amorganizat icircn Brașov evenimentulIT-ul Brașovean Oportunități decolaborare Acesta s-a bucurat de un interes real din partea publi-cului și intenționăm să mai avem ast el de evenimente

StartupWeekendEste un eveniment dedicat 100 creării startup-urilor Dacă

nu ați participat pacircnă acum la un ast el de eveniment vă sugerezsă o aceți Sunt acceptate doar ideile noi iar echipele se ormeazăicircn jurul celor mai populare pitch-uri Este un enomen global șimulte startup-uri au luat naștere icircn elul acesta Cacircștigătorii dinultimi trei ani sunt Mircea Vădan cu plat orma Use ogetherechipa Cloud Copy iar cacircștigătoarea de anul acesta a ost o vechecolaboratoare a revistei Antonia Onaca cu o idee ce ar trebui săschimbe modul icircn care sunt evaluați angajații

Hackaton-ul Techsylvania Organizat icircn cadrul primei ediții a echsylvania acesta a pus

la dispoziția participanților diverse dispozitive mobile precumGoogle Glasses Leap Motion Sphero Little Printer Pebble și

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 846

8 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

multe altele Rezultatul a ost spectaculos miniproiectele reali-zate ind cu adevărat interesante Acestea au combinat olosireaGoogle Glasses icircmpreună cu Leap Motion pentru realizarea unui joc sau tastarea unui cod la bancomat prin monitorizarea mișcăriiochilor Probabil o combinație de Startup Weekend și hackaton icircncare sunt puse la dispoziție ultimele gadget-uri disponibile ar ducela crearea unor startup-uri cu adevărat inovative

Today Software Magazine și IT DaysUnul dintre scopurile declarate icircncă de la lansarea revistei a

ost sprijinirea startup-urilor Revista oday Sofware Magazinesprijină majoritatea inițiativelor din această zonă și ajutăm la pro-movarea acestora De asemenea prin evenimentul anual I Daysce va avea loc icircn 3-4 decembrie anul acesta vom aduce pe scenăcele mai importante startup-uri locale

ConcluziiFenomenul startup-urilor și orientarea companiilor ce

activează icircn zona outsourcing spre crearea de produse sunt icircn

continuă creștere Deși nu putem da un exemplu de succes realne așteptăm să putem ace acest lucru icircn curacircnd Mă bucur săputem da un exemplu real compania ondată de doi clujeni și unamerican LiveRail a ost recent achiziționată de către FacebookAceasta demonstrează ără echivoc valoarea ecosistemului localși a educației

S atul pe care icircl dăm celor ce vor să icircși creeze un startup estesă participe la cacirct de multe evenimente locale și internaționalerelațiile personale iind oarte importante la icircnceput de drumEste puțin probabil că ideea ta va schimba lumea macircine dacă nuinteracționezi cu multă lume

Există multe oportunități pe care le remarcăm mai ales icircn

aptul că programatorii vor din ce icircn ce mai mult să icircși creeze pro-dusele proprii iar acceleratoarele locale icircncep să icircși acă simțităprezența Prin produsele dezvoltate icircn outsourcing sau parte dintr-o mare corporație s-a demonstrat aptul că tehnic putem realizaorice din păcate din cauza condențialității majoritatea dintreele nu pot ăcute publice Universitățile devin din ce icircn ce maideschise icircn comunicarea cu specialiștii ce nu sunt parte a lumiiacademice și sperăm să vedem icircn curacircnd mai multe cursuri despreantreprenoriat și de ce nu chiar un accelerator pentru studenți icircncare practica și cercetarea se reunesc

Startup-uri clujeneIcircn continuare vă propun o listă de startup-uri locale ce merită

să e urmărite Mulțumesc lui Mircea Vădan și lui Marius Morneapentru realizarea acesteia Icircn numerele următoare vom reveni cuun in ograc

Squirrly 1 - Este un plugin SEO de wordpress Compania a osticircnințată de către Florin Mureșan și se bucură deja de un numărmare de clienți De asemenea este sprinjinit de către PhillipKandal co- ondator Skobbler

HackaServer2 și C F3653 - un vechi startup clujean condus decătre Marius Coracircci și Marius Chiș Acesta se adreseazăhacker -ilor ce doresc o provocare legală și administratorilor de sisteme cedoresc o icircmbunătățire a securității printr-o testarea reală

HipMenu4

- este o aplicație ce se adresează celor ce vor1 httpwwwsquirrlyco

2 httphackaservercom

3 httpct 365com

4 httpswwwhipmenuro

să comande macircncare la birou sau acasă Marius Mocian unsusținător local a startup-urilor este parte din această echipă

Evolso5 - un startup pornit de către Alin Stănescu și este acumparte din programul de accelerare de la StartupYard

Mira Rehub6 - unul dintre cele mai promițătoare startup-urilocale Au realizat un sistem de recuperare a celor cu problemelocomotorii olosind senzorul Kinect

Mockups7 - implementeză creearea demockup-uri online avacircnd o bază mare de useri online

5 httpwwwevolsocom

6 httpwwwmirarehabcom

7 httpsmoqupscom

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Ecosistemul IT Clujean din perspectiva startup-urilor

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 946

9wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1046

10 nr 25Iulie 2014 | wwwtodaysoftmagro

RICAP a luat naștere din dorința de

a o eri resurse inovatorilor din Romacircniapentru a ieși pe piețe internaționale cu pro-dusele lor e că este vorba despre energiebio-tehnologii agricultură IC sau oricealt domeniu tehnologic RICAP este ast elprimul program din Romacircnia care sprijinăinovatorii și antreprenorii cu tehnologiiinovatoare să le comercializeze pe piața glo-bală acilitacircnd drumul din laborator cătrepiață Icircn acest e ort programul se bazeazăpe un parteneriat internațional cu unuldintre cele mai importante institute din

SUA care sprijină comercializarea inovării-Larta Institute pe legăturile internaționaleși know-how-ul acestei rețele precum și perețeaua de mentori pe care o consolidăm lanivel local

bdquoCacircnd se vorbește despre problemelebusiness-urilor și startup-urilor eu spun de ecare dată că și banii sunt o parte a pro-blemei dar cea mai importantă problemăeste lipsa de know-how() Experiența pecare am avut-o icircn programul RICAP a osticircn primul racircnd o experiență de coachingDe-asta am și intrat asta am căutat unmediu care să mă icircncurajeze să studiez eudupă programul pe care icircl voiam eu după prioritățile pe care consideram că le avemși să atacăm problemele pas cu pas rdquo DanielHomorodean director Arxia antreprenorparticipant icircn program

Aplicațiile se aconline pacircnă pe 31 iulie2014 direct pesite-ul programuluiwwwricapro

Ce s-a icircntacircmplat pacircnă acumPrima ediție a RICAP a avut loc icircn peri-

oada ianuarie ndash mai 2014 Icircn acest timp15inovatoriau lucrat alături de o echipă dedi-cată dementori și advisoriextraordinariicircntr-un program de mentorat personalizat

pentru a dezvolta și implementainstru-

mente de comercializare strategii deintrare pe piață strategii de comerciali-zare prezentări pentru clienți Icircn uncțiede nivelul de dezvoltare al companiilorprogramul a acilitat peste 30 de legă-turi strategice cu posibili parteneri șinanțatori din SUA și din Europa inclu-siv membri ai Fortune 1000 din IndustryAdvisory Board-ul Larta partenerul ameri-can al programului Icircn plus două companiiau ost icircn Statele Unite unde au beneciatde aproximativ 15 icircntacirclniri de business cu

posibili parteneri și nanțatoriExperiența a ost di erită pentru cei 15participanți

ldquoAcest program se poate adapta la nevo-ile participanților oriunde v-ați a la icircnspectrul de la pur om de știință pacircnă la omde businessrdquo Alexandru Floareș SAIA șiOnco Predict om de știinta și antreprenorparticipant la RICAP

La icircnceputul lunii iunie am lansat adoua ediție RICAP icircn cadrul căreia am avutevenimente și icircntacirclniri icircn mai multe orașeale țării Am avut ocazia să cunoașteminovatori pasionați și cu viziune care audezvoltat produse incredibile

Icircntacirclnirile cu toți acești oameni șidiscuțiile vibrante pe care le-am avut cumulți dintre ei ne-au validat că ceea ce

acem la RICAP le poate o eri un sprijinreal atacirct lor cacirct și utilizatorilor produselorlor

Un rol cheie icircn prima ediție RICAPl-au avut alături de inovatorii selectați icircn

program mentorii romacircni care le-au ostalături și i-au sprijinit icircn denirea viziuniiși strategiei de comercializare și nu numai

I-am avut alături de noi pe Andrei

Pitiș pro esor antreprenorbusiness angel

și neobosit susținător al ecosistemului ino- vării și al start-up-urilortech din Romacircniape Norina Boru antreprenor și consultantcu o vastă experiență icircn domeniul medicaldin Romacircnia și la nivel internațional Deasemenea icirci menționăm pe Alex MirceaDascălu un antrepenor și consultant cuexperiență internațională și pe SandaFoameteeducation lead la Microsof

Mai multe despre mentori cacirct și despreinovatorii care au participat la prima edițeRICAP puteți citi pewwwricaproblog

Cine suntemRICAP este rezultatul unui par-

teneriat icircntre Centrul Romacircn pentruInovație icircn Dezvoltare Locală (CRIDL)și Institutul Larta localizat icircn LosAngeles SUA Programul este nanțat deRomanian-American Foundation (RAF) șiimplementat cu sprijinul GEA Strategy ampConsulting RICAP construiește pe rețeauainternațională și expertiza acumulatătimp de 20 de ani de Larta Institute prinsusținerea a circa 9700 de inovatori din 17țări

Contactwwwricapro | wwwricaproblog |

FacebookLinkedIn RICAP - Innovationrom lab to market | contactricapro

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

eveniment

RICAP drumul inovației de la laborator către piețe glob

La icircnceputul lunii iunie s-au lansat aplicațiile pentru cea de-a doua ediție a Programului de Asistență icircn Comercializarea Inovăriidin Romacircnia (RICAP)

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 346

6

E IT C -

O Măț

10

RICAP ț ă ț

S U

11

Z Q M C

12

D ț ț ș

A K

14

D Y C B ă

P B

17

IT- O S

19

J 8 ăţ ş ă ăţS D

21

S JSON P SQLR R L

24

D - (GO) șă ș

M C

26

S P E ăA C

29

P AD ț M

34

OS 7

M F

35

I T O SDă ț C ș

37

AOP ș L FR V

40

S O (II)R K

43

G ș Bă rsquo M șF A

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 446

4 nr 25Iulie 2014 | wwwtodaysoftmagro

Ultima noutate locală din Cluj este achiziționarea LiveRail de către Facebook

oate ziarele au publicat această in ormație și sunt convins că deja mulți dintrecititorii revistei știu detaliile despre această tranzacție La ora apariției acestei

știri icircncheiasem deja articolul despreecosistemul de IT Clujean din perspectiva startup-urilor pe care l-am icircncheiat icircntr-o notă de optimism reținut Principalul motiv era lipsaunui succes real ce ar putut dat ca un exemplu Acum icircnsă descoperind LiveRail cao companie a cărei valoare a ost conrmată prin achiziția de către Facebook lucrurilestau mult mai bine cel puțin pe hacircrtie

Rămacircnem tot icircn zona promovării I -ului romacircnesc și icircmi ace plăcere să vă spunicircn premieră despre o a doua ediție a I Days wwwitdaysro 3-4 decembrie 2014 Uneveniment organizat de către oday Sofware Magazine și care pune pe scenă cei mai bunispecialiști locali din zona I -ului Vom avea două secțiuni dedicate prezentărilor tehniceuna dedicată trendurilor și una pentru startup-uri și proiecte universitare Primii invitațicare au acceptat să ni se alăture suntBogdan Iordache - organizator How o Web și co-

ondator echHub Bucharest Jose Dunne - co- ondator Babelverse șiSilviu Dumitrescu- specialist Java și Line Manager Accesa Lista este doar la icircnceput și vom reveni cu detalii

Deoarece este vacanță am pregătit pentru cititorii noștri un concurs alături de HondaCluj Este vorba de posibilitatea de a cacircștiga pe durata unui week-end o mașină pentru odrumeție plus un plin de benzină Extragerea cacircștigătorului va avea loc la evenimentulde lansare a numărului 25 SM

Icircn acest număr veți găsi o serie de articole despre startup-uri Ecosistemul I clujeandin perspectiva startup-urilor vă prezintă elementele principale implicate icircn suportul ide-ilor inovative precum și o listă a celor mai promițătoare startup-uri ZenQ un nou startup vă propune o nouă modalitate de a mulțumi prietenilor Programul RICAP invită startup-urile la un program decoaching iar Fundația Danis prezintă realizările programului deeducație nanciară pentru tinerii antreprenoriDrive your community or betterStudenții

sunt icircn prim plan iar Cluj I Cluster propune o structurare a practicii universitare icircnDespre relevanța practicii studențești recem icircn revistă articolele tehnice din acest număr Java 8 noutăţi şi icircmbunătăţiri

prezintă o parte din noile schimbări din Java 8 care ne vor schimba modul icircn care scriemcod Java Suportul JSON icircn Postgress descrie abordarea inedită adăugată icircn ultima versi-une de PostgressPrincipii de design Agile vă supune atenției o serie dedesign pattern-uricare să se poată adapta arhitectura claselor la principiile Agile

Vă dorim o lectură plăcută

Ovidiu MăţanFondator al Today Sofware Magazine

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

editorial

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 546

5wwwtodaysoftmagro | nr 25Iulie 2014

Redacţia oday Sofware Magazine

Fondator Editor icircn chie Ovidiu Mățan ovidiumatantodaysofmagcom

Editor (startups și interviuri)Marius Mornea mariusmorneatodaysofmagcom

Graphic designerDan Hădărău danhadarautodaysofmagcom

CopyrightCorectorEmilia oma emiliatomatodaysofmagcom

raducătorRoxana Elenaroxanaelenatodaysofmagcom

Reviewer avi Bolog tavibologtodaysofmagcom

ReviewerAdrian Lupei adrianlupeitodaysofmagcom

Contabil Delia Comandeliacomantodaysofmagcom

Produs deoday Sofware Solutions SRL

str Plopilor nr 7577Cluj-Napoca Cluj Romaniacontacttodaysofmagcom

wwwtodaysofmagrowww acebookcomtodaysofmag

twittercomtodaysofmag

ISSN 2284 ndash 6352

Copyright oday Sofware Magazine

Reproducerea parțială sau totală a articolelordin revista oday Sofware Magazine

ără acordul redacției este strict interzisă

wwwtodaysofmagrowwwtodaysofmagcom

Lista autorilor

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

Marius Ciotlosmariusciotlosbetfaircom

Delivery Manager Betfair

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Mihai Fischermihaischergmailcom

iOS developer Densio

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 646

6 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

Ecosistemul IT Clujean din perspectiva startup-urilor

Deși primii pași ăcuți icircn această direcție sunt relativtimizi importanța acordată acestora și susținerea locală sunt icircncreștere Multe dintre evenimentele locale din zona I -ului au osecțiune dedicată startup-urilor Cluj Innovation Days I Days

echsylvania Același trend icircl regăsim chiar și icircn cadrul unor eve-nimente cu caracter mai extins precum Cluj Business Days sau

edX oate acestea arată importanța acordată de comunitatedezvoltării unor produse locale generarea acelui IP (IntellectualProperty) ce o eră local o mai bună stabilitate și un mare potențialde dezvoltare Pentru succesul unui startup icircntr-o piață globalăeste nevoie icircnsă de un icircntreg ecosistem care să ajute creșterea aces-tuia de la idee pacircnă la implementare vizibilitate și prot VictorHwang a denit icircntr-un mod oarte plastic imaginea de ansam-blu Industria clasică de outsourcing poate considerată o ermăicircn care semințele plantate cresc oarte repede au toate aceeașidimensiune excepțiile sunt puține și icircn general nu reprezintă unlucru benec Alternativ icircntr-o pădure semințele plantate deși auo mică șansă de supraviețuire pot ajunge niște copaci masivi care

să existe pentru multă vreme Icircn acest mediu este icircn regulă să daigreș iar acest lucru duce la diversitate icircn opoziție cu erma undetoate semințele trebuie să devină plante mature Icircn ambele exem-ple ceea ce contează cel mai mult este solul icircn care aceste semințecresc și care pentru noi reprezintă ecosistemul Dezvoltarea unorproduse noi icircnseamnă comunicare icircncredere și icircmpărtășireaexperiențelor acumulate

Vom analiza icircn continuare principalii actori ce denesc eco-sistemul de I clujean

Comunitatea ITEste alcătuită icircn majoritatea lor de companii de I ce dezvoltă

produse de outsourcing Există cacircteva excepții locale dintre careaș menționa două aparținacircnd industriei jocurilor Exosyphen șiIdea Studio dar și pe cele ale unor companii mari precum Arobssau Skobbler acum devenit elenav

Un număr important de companii sunt și cele care sunt partedintr-o companie internațională auownership pe produsele dez- voltate și există o divizie locală de RampD Numărul acestora este icircncreștere și putem enumera cacircteva dintre ele precum Bet air Yardi

ora HP Ullink SDL sau GamelofO categorie interesantă o reprezintă companiile care activau pe

piața locală și care au ost achiziționate și care se icircnglobează ast el

icircntr-o piață globală N Data ce a achiziționat EBS Accenture acumpărat Evoline startup-ul Nok a ost luat de Intel sau Skobblerachiziționat de elenav

Din perspectiva dezvoltării personale outsourcing-ul o erăposibilitatea de a lucra la proiecte importante precum și asimila-rea unei părți din cultura clienților a modului acestora de lucru

Din perspectiva mai generală a corporațiilor outsourcing-ul o erăaccesul la o parte din cultura celorlalte corporații comunicareaicircntre di eritele proiecte dar șimeeting -uri cu echipele din di eri-tele colțuri ale lumii

Dacă acum zece ani icircn Cluj exista doar simplă execuție acumavem de-a ace cu unownership din ce icircn ce mai extins Icircn generalarhitectura sistemelor se ace acum local iar product manageri-i șianaliștii de bussines sunt la mare căutare Acest apt icircnseamnă șimultă icircncredere și recunoaștere a calității sofware-ului dezvoltaticircn Cluj iar tendința este de a pune accent pe calitate icircn de avoa-rea costurilor De alt el costurile din ce icircn ce mai ridicate ce sereectă și icircn salariile programatorilor reprezintă și un impedi-

ment important icircn dezvoltarea startup-urilor otodată creeazăacea comoditate aleasă de majoritatea icircn detrimentul icircncercării dedezvoltare a unor produse proprii

Piața desofware locală a ajuns la un prim nivel de maturi-tate Există deja angajați ce au cincisprezece ani de experiențăicircn domeniu dar ponderea acestora este relativ scăzută Piața icircngeneral este tacircnără ără să avem icircncă programatori cărunți Dinperspectiva recrutării există o bătălie continuă pentru atragereatalentelor Din păcate sunt situații icircn care persoane și-au dedicat3-4 ani unui startup pentru a angajate Aceasta poate o pro-blemă dar pe de altă parte asimilarea culturii unei companii și omai bună icircnțelegere a procesului de dezvoltare a produselor poateduce icircn cacircțiva ani spre crearea unui startup cacircștigător

UniversitățileLa cele două universități clujene Babeș-Bolyai și Universitatea

ehnică sunt pregătiți aproximativ 1000 de studenți pentru adeveni programatori Numărul acestora este mic comparativ cunecesitățiile pieței iar acest lucru este observat prin numărul dince icircn ce mai mare de companii care icircși deschid sucursale icircn alteorașe De asemenea se construiesc programe alternative precum42 r sau Ruby Girls

Importanța universităților și rolul lor icircn contextul dezvoltării

ermenul ecosistem din titlul este utilizat ca o meta oră a contextului economic clujean care stabilește relații stracircnse icircntreorganisme precum comunitatea I universități și sursele de nanțare Fiecare dintre acestea comunitatea I prin execuțieuniversitatea prin cercetare iar sursele locale de nanțare prin susținerea primelor două sunt implicate icircn crearea unei rețele

de interdependențe și condiționări Apariția startup-urilor icircn acest ecosistem este interpretată ca un instrument de măsurare a inovațieiși a culturii antreprenoriale

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 746

7wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

startup-urilor locale este relativ scăzut Icircncercăm prin evenimen-tul anual I Days wwwitdaysro și de asemenea prin revista

oday Sofware Magazine să promovăm cunoștiințele și proiectele

realizate de universități Acestea trebuie să se trans orme icircntr-unmotor al inovației și a ultimelor tehnologii similar cu ceea ce aceStand ord pentru Silicon Valley

InvestitoriiInvestițiile principale realizate pacircnă acum icircn zona startup-

urilor au ost reprezentate de către cele două acceleratoare dinBulgaria Eleven și LAUNCHub Cinci startup-uri locale au pri-mit investiții de aproximativ 30000 euro dar din păcate toate au

ost icircnchise Dintre icircnvățămintele pe care le putem valorica dinaceastă abordare le semnalăm pe acelea că banii acordați au ostinsucienți pentru atingerea pragului de a acere protabilă ideal

la un nivel internațional și pe acela că necesitățile proiectelor nuau ost acoperite icircn ceea ce privește partea de development mar-keting sau legal

CrowdsourcingReprezintă o alternativă simplă de nanțare Cele două plat-

orme locale Creștem Idei și Multinanțare nu reușit să atragăpublicul larg icircntr-o măsură mare Proiectele și sumele nanțateast el ind la un nivel redus Recent proiectul Multinanțare a rea-lizat o colaborare cu Universitatea Babeș-Balyai prin crearea unuiportal pentru sprijinirea proiectelor academice

Angel investorsDacă acem o paralelă cu alte centre de dezvoltare o parte din

sumele cu care sunt nanțate inițiativele locale vin de la cei ce aurealizat un exit Putem să icirci enumerăm ast el pe Phillip Kandalunul dintre cei patru ondatori ai Skobbler și pe Daniel Metz celcare a vacircndut compania EBS către N Data Deocamdată cei doinu au anunțat vreo investiție icircn zona de I dar ne așteptăm caacest lucru să se icircntacircmple icircn următorul an

AcceleratoareGemini Solutions Foundry vine cu o abordare di erită

Acceleratorul o eră tot ce este nevoie pentru a aduce startup-ul lastadiul de MVP Aceasta icircnseamnă suport tehnic mentorat suport

legal chiar și spațiu de lucru central icircn București Cluj sau IașiScopul acestui MVP este prezentarea startup-urilor unor marionduri de investiții din SUA icircn vederea obținerii nanțării Icircn

momentul de ață căutările și selecția candidaților este icircn plinădes ășurare

Proiecte socialeO alternativă mai populară icircn special pentru companiile de

I ce activează icircn zona outsourcing-ului și doresc orientarea către

produse o reprezintă proiectele sociale Ast el se realizează un pro-iect gratuit pentru comunitate Un exemplu sugestiv este aplicațiaStatui de daci care promovează lucrarea istoricului LeonardVelcescu

Pe plan local se poate prota de oportunitatea o erită anul vii-tor de Cluj atunci cacircnd acesta va avea titlul de Capitala Europeanăa ineretului

Realizarea unui ast el de proiect va icircnsemna un plus pentrucomunitate dar și un mod simplu de a promova un brand și de atrece prin provocările dezvoltării unui produs

Alte structuri

Cluj IT ClusterEste alcătuit dintr-un grup de companii romacircnești avacircnd

ca scop principal atragerea unor mari proiecte ce nu ar putea realizate de o singură companie Icircn același timp se realizează ocomunicare e icientă icircntre companiile implicate creacircndu-secondițiile pentru o mai bună coordonare mai bună a acțiunilorEvenimentul anual organizat de către cluster Cluj I InnovationDays a adus icircmpreună companiile locale reprezentanți ai guver-nului ai Uniuni Europene precum și proiecte de cercetare Recentrevista oday Sofware Magazine icircmpreună cu Cluj I Cluster amorganizat icircn Brașov evenimentulIT-ul Brașovean Oportunități decolaborare Acesta s-a bucurat de un interes real din partea publi-cului și intenționăm să mai avem ast el de evenimente

StartupWeekendEste un eveniment dedicat 100 creării startup-urilor Dacă

nu ați participat pacircnă acum la un ast el de eveniment vă sugerezsă o aceți Sunt acceptate doar ideile noi iar echipele se ormeazăicircn jurul celor mai populare pitch-uri Este un enomen global șimulte startup-uri au luat naștere icircn elul acesta Cacircștigătorii dinultimi trei ani sunt Mircea Vădan cu plat orma Use ogetherechipa Cloud Copy iar cacircștigătoarea de anul acesta a ost o vechecolaboratoare a revistei Antonia Onaca cu o idee ce ar trebui săschimbe modul icircn care sunt evaluați angajații

Hackaton-ul Techsylvania Organizat icircn cadrul primei ediții a echsylvania acesta a pus

la dispoziția participanților diverse dispozitive mobile precumGoogle Glasses Leap Motion Sphero Little Printer Pebble și

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 846

8 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

multe altele Rezultatul a ost spectaculos miniproiectele reali-zate ind cu adevărat interesante Acestea au combinat olosireaGoogle Glasses icircmpreună cu Leap Motion pentru realizarea unui joc sau tastarea unui cod la bancomat prin monitorizarea mișcăriiochilor Probabil o combinație de Startup Weekend și hackaton icircncare sunt puse la dispoziție ultimele gadget-uri disponibile ar ducela crearea unor startup-uri cu adevărat inovative

Today Software Magazine și IT DaysUnul dintre scopurile declarate icircncă de la lansarea revistei a

ost sprijinirea startup-urilor Revista oday Sofware Magazinesprijină majoritatea inițiativelor din această zonă și ajutăm la pro-movarea acestora De asemenea prin evenimentul anual I Daysce va avea loc icircn 3-4 decembrie anul acesta vom aduce pe scenăcele mai importante startup-uri locale

ConcluziiFenomenul startup-urilor și orientarea companiilor ce

activează icircn zona outsourcing spre crearea de produse sunt icircn

continuă creștere Deși nu putem da un exemplu de succes realne așteptăm să putem ace acest lucru icircn curacircnd Mă bucur săputem da un exemplu real compania ondată de doi clujeni și unamerican LiveRail a ost recent achiziționată de către FacebookAceasta demonstrează ără echivoc valoarea ecosistemului localși a educației

S atul pe care icircl dăm celor ce vor să icircși creeze un startup estesă participe la cacirct de multe evenimente locale și internaționalerelațiile personale iind oarte importante la icircnceput de drumEste puțin probabil că ideea ta va schimba lumea macircine dacă nuinteracționezi cu multă lume

Există multe oportunități pe care le remarcăm mai ales icircn

aptul că programatorii vor din ce icircn ce mai mult să icircși creeze pro-dusele proprii iar acceleratoarele locale icircncep să icircși acă simțităprezența Prin produsele dezvoltate icircn outsourcing sau parte dintr-o mare corporație s-a demonstrat aptul că tehnic putem realizaorice din păcate din cauza condențialității majoritatea dintreele nu pot ăcute publice Universitățile devin din ce icircn ce maideschise icircn comunicarea cu specialiștii ce nu sunt parte a lumiiacademice și sperăm să vedem icircn curacircnd mai multe cursuri despreantreprenoriat și de ce nu chiar un accelerator pentru studenți icircncare practica și cercetarea se reunesc

Startup-uri clujeneIcircn continuare vă propun o listă de startup-uri locale ce merită

să e urmărite Mulțumesc lui Mircea Vădan și lui Marius Morneapentru realizarea acesteia Icircn numerele următoare vom reveni cuun in ograc

Squirrly 1 - Este un plugin SEO de wordpress Compania a osticircnințată de către Florin Mureșan și se bucură deja de un numărmare de clienți De asemenea este sprinjinit de către PhillipKandal co- ondator Skobbler

HackaServer2 și C F3653 - un vechi startup clujean condus decătre Marius Coracircci și Marius Chiș Acesta se adreseazăhacker -ilor ce doresc o provocare legală și administratorilor de sisteme cedoresc o icircmbunătățire a securității printr-o testarea reală

HipMenu4

- este o aplicație ce se adresează celor ce vor1 httpwwwsquirrlyco

2 httphackaservercom

3 httpct 365com

4 httpswwwhipmenuro

să comande macircncare la birou sau acasă Marius Mocian unsusținător local a startup-urilor este parte din această echipă

Evolso5 - un startup pornit de către Alin Stănescu și este acumparte din programul de accelerare de la StartupYard

Mira Rehub6 - unul dintre cele mai promițătoare startup-urilocale Au realizat un sistem de recuperare a celor cu problemelocomotorii olosind senzorul Kinect

Mockups7 - implementeză creearea demockup-uri online avacircnd o bază mare de useri online

5 httpwwwevolsocom

6 httpwwwmirarehabcom

7 httpsmoqupscom

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Ecosistemul IT Clujean din perspectiva startup-urilor

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 946

9wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1046

10 nr 25Iulie 2014 | wwwtodaysoftmagro

RICAP a luat naștere din dorința de

a o eri resurse inovatorilor din Romacircniapentru a ieși pe piețe internaționale cu pro-dusele lor e că este vorba despre energiebio-tehnologii agricultură IC sau oricealt domeniu tehnologic RICAP este ast elprimul program din Romacircnia care sprijinăinovatorii și antreprenorii cu tehnologiiinovatoare să le comercializeze pe piața glo-bală acilitacircnd drumul din laborator cătrepiață Icircn acest e ort programul se bazeazăpe un parteneriat internațional cu unuldintre cele mai importante institute din

SUA care sprijină comercializarea inovării-Larta Institute pe legăturile internaționaleși know-how-ul acestei rețele precum și perețeaua de mentori pe care o consolidăm lanivel local

bdquoCacircnd se vorbește despre problemelebusiness-urilor și startup-urilor eu spun de ecare dată că și banii sunt o parte a pro-blemei dar cea mai importantă problemăeste lipsa de know-how() Experiența pecare am avut-o icircn programul RICAP a osticircn primul racircnd o experiență de coachingDe-asta am și intrat asta am căutat unmediu care să mă icircncurajeze să studiez eudupă programul pe care icircl voiam eu după prioritățile pe care consideram că le avemși să atacăm problemele pas cu pas rdquo DanielHomorodean director Arxia antreprenorparticipant icircn program

Aplicațiile se aconline pacircnă pe 31 iulie2014 direct pesite-ul programuluiwwwricapro

Ce s-a icircntacircmplat pacircnă acumPrima ediție a RICAP a avut loc icircn peri-

oada ianuarie ndash mai 2014 Icircn acest timp15inovatoriau lucrat alături de o echipă dedi-cată dementori și advisoriextraordinariicircntr-un program de mentorat personalizat

pentru a dezvolta și implementainstru-

mente de comercializare strategii deintrare pe piață strategii de comerciali-zare prezentări pentru clienți Icircn uncțiede nivelul de dezvoltare al companiilorprogramul a acilitat peste 30 de legă-turi strategice cu posibili parteneri șinanțatori din SUA și din Europa inclu-siv membri ai Fortune 1000 din IndustryAdvisory Board-ul Larta partenerul ameri-can al programului Icircn plus două companiiau ost icircn Statele Unite unde au beneciatde aproximativ 15 icircntacirclniri de business cu

posibili parteneri și nanțatoriExperiența a ost di erită pentru cei 15participanți

ldquoAcest program se poate adapta la nevo-ile participanților oriunde v-ați a la icircnspectrul de la pur om de știință pacircnă la omde businessrdquo Alexandru Floareș SAIA șiOnco Predict om de știinta și antreprenorparticipant la RICAP

La icircnceputul lunii iunie am lansat adoua ediție RICAP icircn cadrul căreia am avutevenimente și icircntacirclniri icircn mai multe orașeale țării Am avut ocazia să cunoașteminovatori pasionați și cu viziune care audezvoltat produse incredibile

Icircntacirclnirile cu toți acești oameni șidiscuțiile vibrante pe care le-am avut cumulți dintre ei ne-au validat că ceea ce

acem la RICAP le poate o eri un sprijinreal atacirct lor cacirct și utilizatorilor produselorlor

Un rol cheie icircn prima ediție RICAPl-au avut alături de inovatorii selectați icircn

program mentorii romacircni care le-au ostalături și i-au sprijinit icircn denirea viziuniiși strategiei de comercializare și nu numai

I-am avut alături de noi pe Andrei

Pitiș pro esor antreprenorbusiness angel

și neobosit susținător al ecosistemului ino- vării și al start-up-urilortech din Romacircniape Norina Boru antreprenor și consultantcu o vastă experiență icircn domeniul medicaldin Romacircnia și la nivel internațional Deasemenea icirci menționăm pe Alex MirceaDascălu un antrepenor și consultant cuexperiență internațională și pe SandaFoameteeducation lead la Microsof

Mai multe despre mentori cacirct și despreinovatorii care au participat la prima edițeRICAP puteți citi pewwwricaproblog

Cine suntemRICAP este rezultatul unui par-

teneriat icircntre Centrul Romacircn pentruInovație icircn Dezvoltare Locală (CRIDL)și Institutul Larta localizat icircn LosAngeles SUA Programul este nanțat deRomanian-American Foundation (RAF) șiimplementat cu sprijinul GEA Strategy ampConsulting RICAP construiește pe rețeauainternațională și expertiza acumulatătimp de 20 de ani de Larta Institute prinsusținerea a circa 9700 de inovatori din 17țări

Contactwwwricapro | wwwricaproblog |

FacebookLinkedIn RICAP - Innovationrom lab to market | contactricapro

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

eveniment

RICAP drumul inovației de la laborator către piețe glob

La icircnceputul lunii iunie s-au lansat aplicațiile pentru cea de-a doua ediție a Programului de Asistență icircn Comercializarea Inovăriidin Romacircnia (RICAP)

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 446

4 nr 25Iulie 2014 | wwwtodaysoftmagro

Ultima noutate locală din Cluj este achiziționarea LiveRail de către Facebook

oate ziarele au publicat această in ormație și sunt convins că deja mulți dintrecititorii revistei știu detaliile despre această tranzacție La ora apariției acestei

știri icircncheiasem deja articolul despreecosistemul de IT Clujean din perspectiva startup-urilor pe care l-am icircncheiat icircntr-o notă de optimism reținut Principalul motiv era lipsaunui succes real ce ar putut dat ca un exemplu Acum icircnsă descoperind LiveRail cao companie a cărei valoare a ost conrmată prin achiziția de către Facebook lucrurilestau mult mai bine cel puțin pe hacircrtie

Rămacircnem tot icircn zona promovării I -ului romacircnesc și icircmi ace plăcere să vă spunicircn premieră despre o a doua ediție a I Days wwwitdaysro 3-4 decembrie 2014 Uneveniment organizat de către oday Sofware Magazine și care pune pe scenă cei mai bunispecialiști locali din zona I -ului Vom avea două secțiuni dedicate prezentărilor tehniceuna dedicată trendurilor și una pentru startup-uri și proiecte universitare Primii invitațicare au acceptat să ni se alăture suntBogdan Iordache - organizator How o Web și co-

ondator echHub Bucharest Jose Dunne - co- ondator Babelverse șiSilviu Dumitrescu- specialist Java și Line Manager Accesa Lista este doar la icircnceput și vom reveni cu detalii

Deoarece este vacanță am pregătit pentru cititorii noștri un concurs alături de HondaCluj Este vorba de posibilitatea de a cacircștiga pe durata unui week-end o mașină pentru odrumeție plus un plin de benzină Extragerea cacircștigătorului va avea loc la evenimentulde lansare a numărului 25 SM

Icircn acest număr veți găsi o serie de articole despre startup-uri Ecosistemul I clujeandin perspectiva startup-urilor vă prezintă elementele principale implicate icircn suportul ide-ilor inovative precum și o listă a celor mai promițătoare startup-uri ZenQ un nou startup vă propune o nouă modalitate de a mulțumi prietenilor Programul RICAP invită startup-urile la un program decoaching iar Fundația Danis prezintă realizările programului deeducație nanciară pentru tinerii antreprenoriDrive your community or betterStudenții

sunt icircn prim plan iar Cluj I Cluster propune o structurare a practicii universitare icircnDespre relevanța practicii studențești recem icircn revistă articolele tehnice din acest număr Java 8 noutăţi şi icircmbunătăţiri

prezintă o parte din noile schimbări din Java 8 care ne vor schimba modul icircn care scriemcod Java Suportul JSON icircn Postgress descrie abordarea inedită adăugată icircn ultima versi-une de PostgressPrincipii de design Agile vă supune atenției o serie dedesign pattern-uricare să se poată adapta arhitectura claselor la principiile Agile

Vă dorim o lectură plăcută

Ovidiu MăţanFondator al Today Sofware Magazine

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

editorial

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 546

5wwwtodaysoftmagro | nr 25Iulie 2014

Redacţia oday Sofware Magazine

Fondator Editor icircn chie Ovidiu Mățan ovidiumatantodaysofmagcom

Editor (startups și interviuri)Marius Mornea mariusmorneatodaysofmagcom

Graphic designerDan Hădărău danhadarautodaysofmagcom

CopyrightCorectorEmilia oma emiliatomatodaysofmagcom

raducătorRoxana Elenaroxanaelenatodaysofmagcom

Reviewer avi Bolog tavibologtodaysofmagcom

ReviewerAdrian Lupei adrianlupeitodaysofmagcom

Contabil Delia Comandeliacomantodaysofmagcom

Produs deoday Sofware Solutions SRL

str Plopilor nr 7577Cluj-Napoca Cluj Romaniacontacttodaysofmagcom

wwwtodaysofmagrowww acebookcomtodaysofmag

twittercomtodaysofmag

ISSN 2284 ndash 6352

Copyright oday Sofware Magazine

Reproducerea parțială sau totală a articolelordin revista oday Sofware Magazine

ără acordul redacției este strict interzisă

wwwtodaysofmagrowwwtodaysofmagcom

Lista autorilor

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

Marius Ciotlosmariusciotlosbetfaircom

Delivery Manager Betfair

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Mihai Fischermihaischergmailcom

iOS developer Densio

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 646

6 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

Ecosistemul IT Clujean din perspectiva startup-urilor

Deși primii pași ăcuți icircn această direcție sunt relativtimizi importanța acordată acestora și susținerea locală sunt icircncreștere Multe dintre evenimentele locale din zona I -ului au osecțiune dedicată startup-urilor Cluj Innovation Days I Days

echsylvania Același trend icircl regăsim chiar și icircn cadrul unor eve-nimente cu caracter mai extins precum Cluj Business Days sau

edX oate acestea arată importanța acordată de comunitatedezvoltării unor produse locale generarea acelui IP (IntellectualProperty) ce o eră local o mai bună stabilitate și un mare potențialde dezvoltare Pentru succesul unui startup icircntr-o piață globalăeste nevoie icircnsă de un icircntreg ecosistem care să ajute creșterea aces-tuia de la idee pacircnă la implementare vizibilitate și prot VictorHwang a denit icircntr-un mod oarte plastic imaginea de ansam-blu Industria clasică de outsourcing poate considerată o ermăicircn care semințele plantate cresc oarte repede au toate aceeașidimensiune excepțiile sunt puține și icircn general nu reprezintă unlucru benec Alternativ icircntr-o pădure semințele plantate deși auo mică șansă de supraviețuire pot ajunge niște copaci masivi care

să existe pentru multă vreme Icircn acest mediu este icircn regulă să daigreș iar acest lucru duce la diversitate icircn opoziție cu erma undetoate semințele trebuie să devină plante mature Icircn ambele exem-ple ceea ce contează cel mai mult este solul icircn care aceste semințecresc și care pentru noi reprezintă ecosistemul Dezvoltarea unorproduse noi icircnseamnă comunicare icircncredere și icircmpărtășireaexperiențelor acumulate

Vom analiza icircn continuare principalii actori ce denesc eco-sistemul de I clujean

Comunitatea ITEste alcătuită icircn majoritatea lor de companii de I ce dezvoltă

produse de outsourcing Există cacircteva excepții locale dintre careaș menționa două aparținacircnd industriei jocurilor Exosyphen șiIdea Studio dar și pe cele ale unor companii mari precum Arobssau Skobbler acum devenit elenav

Un număr important de companii sunt și cele care sunt partedintr-o companie internațională auownership pe produsele dez- voltate și există o divizie locală de RampD Numărul acestora este icircncreștere și putem enumera cacircteva dintre ele precum Bet air Yardi

ora HP Ullink SDL sau GamelofO categorie interesantă o reprezintă companiile care activau pe

piața locală și care au ost achiziționate și care se icircnglobează ast el

icircntr-o piață globală N Data ce a achiziționat EBS Accenture acumpărat Evoline startup-ul Nok a ost luat de Intel sau Skobblerachiziționat de elenav

Din perspectiva dezvoltării personale outsourcing-ul o erăposibilitatea de a lucra la proiecte importante precum și asimila-rea unei părți din cultura clienților a modului acestora de lucru

Din perspectiva mai generală a corporațiilor outsourcing-ul o erăaccesul la o parte din cultura celorlalte corporații comunicareaicircntre di eritele proiecte dar șimeeting -uri cu echipele din di eri-tele colțuri ale lumii

Dacă acum zece ani icircn Cluj exista doar simplă execuție acumavem de-a ace cu unownership din ce icircn ce mai extins Icircn generalarhitectura sistemelor se ace acum local iar product manageri-i șianaliștii de bussines sunt la mare căutare Acest apt icircnseamnă șimultă icircncredere și recunoaștere a calității sofware-ului dezvoltaticircn Cluj iar tendința este de a pune accent pe calitate icircn de avoa-rea costurilor De alt el costurile din ce icircn ce mai ridicate ce sereectă și icircn salariile programatorilor reprezintă și un impedi-

ment important icircn dezvoltarea startup-urilor otodată creeazăacea comoditate aleasă de majoritatea icircn detrimentul icircncercării dedezvoltare a unor produse proprii

Piața desofware locală a ajuns la un prim nivel de maturi-tate Există deja angajați ce au cincisprezece ani de experiențăicircn domeniu dar ponderea acestora este relativ scăzută Piața icircngeneral este tacircnără ără să avem icircncă programatori cărunți Dinperspectiva recrutării există o bătălie continuă pentru atragereatalentelor Din păcate sunt situații icircn care persoane și-au dedicat3-4 ani unui startup pentru a angajate Aceasta poate o pro-blemă dar pe de altă parte asimilarea culturii unei companii și omai bună icircnțelegere a procesului de dezvoltare a produselor poateduce icircn cacircțiva ani spre crearea unui startup cacircștigător

UniversitățileLa cele două universități clujene Babeș-Bolyai și Universitatea

ehnică sunt pregătiți aproximativ 1000 de studenți pentru adeveni programatori Numărul acestora este mic comparativ cunecesitățiile pieței iar acest lucru este observat prin numărul dince icircn ce mai mare de companii care icircși deschid sucursale icircn alteorașe De asemenea se construiesc programe alternative precum42 r sau Ruby Girls

Importanța universităților și rolul lor icircn contextul dezvoltării

ermenul ecosistem din titlul este utilizat ca o meta oră a contextului economic clujean care stabilește relații stracircnse icircntreorganisme precum comunitatea I universități și sursele de nanțare Fiecare dintre acestea comunitatea I prin execuțieuniversitatea prin cercetare iar sursele locale de nanțare prin susținerea primelor două sunt implicate icircn crearea unei rețele

de interdependențe și condiționări Apariția startup-urilor icircn acest ecosistem este interpretată ca un instrument de măsurare a inovațieiși a culturii antreprenoriale

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 746

7wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

startup-urilor locale este relativ scăzut Icircncercăm prin evenimen-tul anual I Days wwwitdaysro și de asemenea prin revista

oday Sofware Magazine să promovăm cunoștiințele și proiectele

realizate de universități Acestea trebuie să se trans orme icircntr-unmotor al inovației și a ultimelor tehnologii similar cu ceea ce aceStand ord pentru Silicon Valley

InvestitoriiInvestițiile principale realizate pacircnă acum icircn zona startup-

urilor au ost reprezentate de către cele două acceleratoare dinBulgaria Eleven și LAUNCHub Cinci startup-uri locale au pri-mit investiții de aproximativ 30000 euro dar din păcate toate au

ost icircnchise Dintre icircnvățămintele pe care le putem valorica dinaceastă abordare le semnalăm pe acelea că banii acordați au ostinsucienți pentru atingerea pragului de a acere protabilă ideal

la un nivel internațional și pe acela că necesitățile proiectelor nuau ost acoperite icircn ceea ce privește partea de development mar-keting sau legal

CrowdsourcingReprezintă o alternativă simplă de nanțare Cele două plat-

orme locale Creștem Idei și Multinanțare nu reușit să atragăpublicul larg icircntr-o măsură mare Proiectele și sumele nanțateast el ind la un nivel redus Recent proiectul Multinanțare a rea-lizat o colaborare cu Universitatea Babeș-Balyai prin crearea unuiportal pentru sprijinirea proiectelor academice

Angel investorsDacă acem o paralelă cu alte centre de dezvoltare o parte din

sumele cu care sunt nanțate inițiativele locale vin de la cei ce aurealizat un exit Putem să icirci enumerăm ast el pe Phillip Kandalunul dintre cei patru ondatori ai Skobbler și pe Daniel Metz celcare a vacircndut compania EBS către N Data Deocamdată cei doinu au anunțat vreo investiție icircn zona de I dar ne așteptăm caacest lucru să se icircntacircmple icircn următorul an

AcceleratoareGemini Solutions Foundry vine cu o abordare di erită

Acceleratorul o eră tot ce este nevoie pentru a aduce startup-ul lastadiul de MVP Aceasta icircnseamnă suport tehnic mentorat suport

legal chiar și spațiu de lucru central icircn București Cluj sau IașiScopul acestui MVP este prezentarea startup-urilor unor marionduri de investiții din SUA icircn vederea obținerii nanțării Icircn

momentul de ață căutările și selecția candidaților este icircn plinădes ășurare

Proiecte socialeO alternativă mai populară icircn special pentru companiile de

I ce activează icircn zona outsourcing-ului și doresc orientarea către

produse o reprezintă proiectele sociale Ast el se realizează un pro-iect gratuit pentru comunitate Un exemplu sugestiv este aplicațiaStatui de daci care promovează lucrarea istoricului LeonardVelcescu

Pe plan local se poate prota de oportunitatea o erită anul vii-tor de Cluj atunci cacircnd acesta va avea titlul de Capitala Europeanăa ineretului

Realizarea unui ast el de proiect va icircnsemna un plus pentrucomunitate dar și un mod simplu de a promova un brand și de atrece prin provocările dezvoltării unui produs

Alte structuri

Cluj IT ClusterEste alcătuit dintr-un grup de companii romacircnești avacircnd

ca scop principal atragerea unor mari proiecte ce nu ar putea realizate de o singură companie Icircn același timp se realizează ocomunicare e icientă icircntre companiile implicate creacircndu-secondițiile pentru o mai bună coordonare mai bună a acțiunilorEvenimentul anual organizat de către cluster Cluj I InnovationDays a adus icircmpreună companiile locale reprezentanți ai guver-nului ai Uniuni Europene precum și proiecte de cercetare Recentrevista oday Sofware Magazine icircmpreună cu Cluj I Cluster amorganizat icircn Brașov evenimentulIT-ul Brașovean Oportunități decolaborare Acesta s-a bucurat de un interes real din partea publi-cului și intenționăm să mai avem ast el de evenimente

StartupWeekendEste un eveniment dedicat 100 creării startup-urilor Dacă

nu ați participat pacircnă acum la un ast el de eveniment vă sugerezsă o aceți Sunt acceptate doar ideile noi iar echipele se ormeazăicircn jurul celor mai populare pitch-uri Este un enomen global șimulte startup-uri au luat naștere icircn elul acesta Cacircștigătorii dinultimi trei ani sunt Mircea Vădan cu plat orma Use ogetherechipa Cloud Copy iar cacircștigătoarea de anul acesta a ost o vechecolaboratoare a revistei Antonia Onaca cu o idee ce ar trebui săschimbe modul icircn care sunt evaluați angajații

Hackaton-ul Techsylvania Organizat icircn cadrul primei ediții a echsylvania acesta a pus

la dispoziția participanților diverse dispozitive mobile precumGoogle Glasses Leap Motion Sphero Little Printer Pebble și

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 846

8 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

multe altele Rezultatul a ost spectaculos miniproiectele reali-zate ind cu adevărat interesante Acestea au combinat olosireaGoogle Glasses icircmpreună cu Leap Motion pentru realizarea unui joc sau tastarea unui cod la bancomat prin monitorizarea mișcăriiochilor Probabil o combinație de Startup Weekend și hackaton icircncare sunt puse la dispoziție ultimele gadget-uri disponibile ar ducela crearea unor startup-uri cu adevărat inovative

Today Software Magazine și IT DaysUnul dintre scopurile declarate icircncă de la lansarea revistei a

ost sprijinirea startup-urilor Revista oday Sofware Magazinesprijină majoritatea inițiativelor din această zonă și ajutăm la pro-movarea acestora De asemenea prin evenimentul anual I Daysce va avea loc icircn 3-4 decembrie anul acesta vom aduce pe scenăcele mai importante startup-uri locale

ConcluziiFenomenul startup-urilor și orientarea companiilor ce

activează icircn zona outsourcing spre crearea de produse sunt icircn

continuă creștere Deși nu putem da un exemplu de succes realne așteptăm să putem ace acest lucru icircn curacircnd Mă bucur săputem da un exemplu real compania ondată de doi clujeni și unamerican LiveRail a ost recent achiziționată de către FacebookAceasta demonstrează ără echivoc valoarea ecosistemului localși a educației

S atul pe care icircl dăm celor ce vor să icircși creeze un startup estesă participe la cacirct de multe evenimente locale și internaționalerelațiile personale iind oarte importante la icircnceput de drumEste puțin probabil că ideea ta va schimba lumea macircine dacă nuinteracționezi cu multă lume

Există multe oportunități pe care le remarcăm mai ales icircn

aptul că programatorii vor din ce icircn ce mai mult să icircși creeze pro-dusele proprii iar acceleratoarele locale icircncep să icircși acă simțităprezența Prin produsele dezvoltate icircn outsourcing sau parte dintr-o mare corporație s-a demonstrat aptul că tehnic putem realizaorice din păcate din cauza condențialității majoritatea dintreele nu pot ăcute publice Universitățile devin din ce icircn ce maideschise icircn comunicarea cu specialiștii ce nu sunt parte a lumiiacademice și sperăm să vedem icircn curacircnd mai multe cursuri despreantreprenoriat și de ce nu chiar un accelerator pentru studenți icircncare practica și cercetarea se reunesc

Startup-uri clujeneIcircn continuare vă propun o listă de startup-uri locale ce merită

să e urmărite Mulțumesc lui Mircea Vădan și lui Marius Morneapentru realizarea acesteia Icircn numerele următoare vom reveni cuun in ograc

Squirrly 1 - Este un plugin SEO de wordpress Compania a osticircnințată de către Florin Mureșan și se bucură deja de un numărmare de clienți De asemenea este sprinjinit de către PhillipKandal co- ondator Skobbler

HackaServer2 și C F3653 - un vechi startup clujean condus decătre Marius Coracircci și Marius Chiș Acesta se adreseazăhacker -ilor ce doresc o provocare legală și administratorilor de sisteme cedoresc o icircmbunătățire a securității printr-o testarea reală

HipMenu4

- este o aplicație ce se adresează celor ce vor1 httpwwwsquirrlyco

2 httphackaservercom

3 httpct 365com

4 httpswwwhipmenuro

să comande macircncare la birou sau acasă Marius Mocian unsusținător local a startup-urilor este parte din această echipă

Evolso5 - un startup pornit de către Alin Stănescu și este acumparte din programul de accelerare de la StartupYard

Mira Rehub6 - unul dintre cele mai promițătoare startup-urilocale Au realizat un sistem de recuperare a celor cu problemelocomotorii olosind senzorul Kinect

Mockups7 - implementeză creearea demockup-uri online avacircnd o bază mare de useri online

5 httpwwwevolsocom

6 httpwwwmirarehabcom

7 httpsmoqupscom

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Ecosistemul IT Clujean din perspectiva startup-urilor

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 946

9wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1046

10 nr 25Iulie 2014 | wwwtodaysoftmagro

RICAP a luat naștere din dorința de

a o eri resurse inovatorilor din Romacircniapentru a ieși pe piețe internaționale cu pro-dusele lor e că este vorba despre energiebio-tehnologii agricultură IC sau oricealt domeniu tehnologic RICAP este ast elprimul program din Romacircnia care sprijinăinovatorii și antreprenorii cu tehnologiiinovatoare să le comercializeze pe piața glo-bală acilitacircnd drumul din laborator cătrepiață Icircn acest e ort programul se bazeazăpe un parteneriat internațional cu unuldintre cele mai importante institute din

SUA care sprijină comercializarea inovării-Larta Institute pe legăturile internaționaleși know-how-ul acestei rețele precum și perețeaua de mentori pe care o consolidăm lanivel local

bdquoCacircnd se vorbește despre problemelebusiness-urilor și startup-urilor eu spun de ecare dată că și banii sunt o parte a pro-blemei dar cea mai importantă problemăeste lipsa de know-how() Experiența pecare am avut-o icircn programul RICAP a osticircn primul racircnd o experiență de coachingDe-asta am și intrat asta am căutat unmediu care să mă icircncurajeze să studiez eudupă programul pe care icircl voiam eu după prioritățile pe care consideram că le avemși să atacăm problemele pas cu pas rdquo DanielHomorodean director Arxia antreprenorparticipant icircn program

Aplicațiile se aconline pacircnă pe 31 iulie2014 direct pesite-ul programuluiwwwricapro

Ce s-a icircntacircmplat pacircnă acumPrima ediție a RICAP a avut loc icircn peri-

oada ianuarie ndash mai 2014 Icircn acest timp15inovatoriau lucrat alături de o echipă dedi-cată dementori și advisoriextraordinariicircntr-un program de mentorat personalizat

pentru a dezvolta și implementainstru-

mente de comercializare strategii deintrare pe piață strategii de comerciali-zare prezentări pentru clienți Icircn uncțiede nivelul de dezvoltare al companiilorprogramul a acilitat peste 30 de legă-turi strategice cu posibili parteneri șinanțatori din SUA și din Europa inclu-siv membri ai Fortune 1000 din IndustryAdvisory Board-ul Larta partenerul ameri-can al programului Icircn plus două companiiau ost icircn Statele Unite unde au beneciatde aproximativ 15 icircntacirclniri de business cu

posibili parteneri și nanțatoriExperiența a ost di erită pentru cei 15participanți

ldquoAcest program se poate adapta la nevo-ile participanților oriunde v-ați a la icircnspectrul de la pur om de știință pacircnă la omde businessrdquo Alexandru Floareș SAIA șiOnco Predict om de știinta și antreprenorparticipant la RICAP

La icircnceputul lunii iunie am lansat adoua ediție RICAP icircn cadrul căreia am avutevenimente și icircntacirclniri icircn mai multe orașeale țării Am avut ocazia să cunoașteminovatori pasionați și cu viziune care audezvoltat produse incredibile

Icircntacirclnirile cu toți acești oameni șidiscuțiile vibrante pe care le-am avut cumulți dintre ei ne-au validat că ceea ce

acem la RICAP le poate o eri un sprijinreal atacirct lor cacirct și utilizatorilor produselorlor

Un rol cheie icircn prima ediție RICAPl-au avut alături de inovatorii selectați icircn

program mentorii romacircni care le-au ostalături și i-au sprijinit icircn denirea viziuniiși strategiei de comercializare și nu numai

I-am avut alături de noi pe Andrei

Pitiș pro esor antreprenorbusiness angel

și neobosit susținător al ecosistemului ino- vării și al start-up-urilortech din Romacircniape Norina Boru antreprenor și consultantcu o vastă experiență icircn domeniul medicaldin Romacircnia și la nivel internațional Deasemenea icirci menționăm pe Alex MirceaDascălu un antrepenor și consultant cuexperiență internațională și pe SandaFoameteeducation lead la Microsof

Mai multe despre mentori cacirct și despreinovatorii care au participat la prima edițeRICAP puteți citi pewwwricaproblog

Cine suntemRICAP este rezultatul unui par-

teneriat icircntre Centrul Romacircn pentruInovație icircn Dezvoltare Locală (CRIDL)și Institutul Larta localizat icircn LosAngeles SUA Programul este nanțat deRomanian-American Foundation (RAF) șiimplementat cu sprijinul GEA Strategy ampConsulting RICAP construiește pe rețeauainternațională și expertiza acumulatătimp de 20 de ani de Larta Institute prinsusținerea a circa 9700 de inovatori din 17țări

Contactwwwricapro | wwwricaproblog |

FacebookLinkedIn RICAP - Innovationrom lab to market | contactricapro

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

eveniment

RICAP drumul inovației de la laborator către piețe glob

La icircnceputul lunii iunie s-au lansat aplicațiile pentru cea de-a doua ediție a Programului de Asistență icircn Comercializarea Inovăriidin Romacircnia (RICAP)

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 546

5wwwtodaysoftmagro | nr 25Iulie 2014

Redacţia oday Sofware Magazine

Fondator Editor icircn chie Ovidiu Mățan ovidiumatantodaysofmagcom

Editor (startups și interviuri)Marius Mornea mariusmorneatodaysofmagcom

Graphic designerDan Hădărău danhadarautodaysofmagcom

CopyrightCorectorEmilia oma emiliatomatodaysofmagcom

raducătorRoxana Elenaroxanaelenatodaysofmagcom

Reviewer avi Bolog tavibologtodaysofmagcom

ReviewerAdrian Lupei adrianlupeitodaysofmagcom

Contabil Delia Comandeliacomantodaysofmagcom

Produs deoday Sofware Solutions SRL

str Plopilor nr 7577Cluj-Napoca Cluj Romaniacontacttodaysofmagcom

wwwtodaysofmagrowww acebookcomtodaysofmag

twittercomtodaysofmag

ISSN 2284 ndash 6352

Copyright oday Sofware Magazine

Reproducerea parțială sau totală a articolelordin revista oday Sofware Magazine

ără acordul redacției este strict interzisă

wwwtodaysofmagrowwwtodaysofmagcom

Lista autorilor

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

Marius Ciotlosmariusciotlosbetfaircom

Delivery Manager Betfair

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Mihai Fischermihaischergmailcom

iOS developer Densio

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 646

6 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

Ecosistemul IT Clujean din perspectiva startup-urilor

Deși primii pași ăcuți icircn această direcție sunt relativtimizi importanța acordată acestora și susținerea locală sunt icircncreștere Multe dintre evenimentele locale din zona I -ului au osecțiune dedicată startup-urilor Cluj Innovation Days I Days

echsylvania Același trend icircl regăsim chiar și icircn cadrul unor eve-nimente cu caracter mai extins precum Cluj Business Days sau

edX oate acestea arată importanța acordată de comunitatedezvoltării unor produse locale generarea acelui IP (IntellectualProperty) ce o eră local o mai bună stabilitate și un mare potențialde dezvoltare Pentru succesul unui startup icircntr-o piață globalăeste nevoie icircnsă de un icircntreg ecosistem care să ajute creșterea aces-tuia de la idee pacircnă la implementare vizibilitate și prot VictorHwang a denit icircntr-un mod oarte plastic imaginea de ansam-blu Industria clasică de outsourcing poate considerată o ermăicircn care semințele plantate cresc oarte repede au toate aceeașidimensiune excepțiile sunt puține și icircn general nu reprezintă unlucru benec Alternativ icircntr-o pădure semințele plantate deși auo mică șansă de supraviețuire pot ajunge niște copaci masivi care

să existe pentru multă vreme Icircn acest mediu este icircn regulă să daigreș iar acest lucru duce la diversitate icircn opoziție cu erma undetoate semințele trebuie să devină plante mature Icircn ambele exem-ple ceea ce contează cel mai mult este solul icircn care aceste semințecresc și care pentru noi reprezintă ecosistemul Dezvoltarea unorproduse noi icircnseamnă comunicare icircncredere și icircmpărtășireaexperiențelor acumulate

Vom analiza icircn continuare principalii actori ce denesc eco-sistemul de I clujean

Comunitatea ITEste alcătuită icircn majoritatea lor de companii de I ce dezvoltă

produse de outsourcing Există cacircteva excepții locale dintre careaș menționa două aparținacircnd industriei jocurilor Exosyphen șiIdea Studio dar și pe cele ale unor companii mari precum Arobssau Skobbler acum devenit elenav

Un număr important de companii sunt și cele care sunt partedintr-o companie internațională auownership pe produsele dez- voltate și există o divizie locală de RampD Numărul acestora este icircncreștere și putem enumera cacircteva dintre ele precum Bet air Yardi

ora HP Ullink SDL sau GamelofO categorie interesantă o reprezintă companiile care activau pe

piața locală și care au ost achiziționate și care se icircnglobează ast el

icircntr-o piață globală N Data ce a achiziționat EBS Accenture acumpărat Evoline startup-ul Nok a ost luat de Intel sau Skobblerachiziționat de elenav

Din perspectiva dezvoltării personale outsourcing-ul o erăposibilitatea de a lucra la proiecte importante precum și asimila-rea unei părți din cultura clienților a modului acestora de lucru

Din perspectiva mai generală a corporațiilor outsourcing-ul o erăaccesul la o parte din cultura celorlalte corporații comunicareaicircntre di eritele proiecte dar șimeeting -uri cu echipele din di eri-tele colțuri ale lumii

Dacă acum zece ani icircn Cluj exista doar simplă execuție acumavem de-a ace cu unownership din ce icircn ce mai extins Icircn generalarhitectura sistemelor se ace acum local iar product manageri-i șianaliștii de bussines sunt la mare căutare Acest apt icircnseamnă șimultă icircncredere și recunoaștere a calității sofware-ului dezvoltaticircn Cluj iar tendința este de a pune accent pe calitate icircn de avoa-rea costurilor De alt el costurile din ce icircn ce mai ridicate ce sereectă și icircn salariile programatorilor reprezintă și un impedi-

ment important icircn dezvoltarea startup-urilor otodată creeazăacea comoditate aleasă de majoritatea icircn detrimentul icircncercării dedezvoltare a unor produse proprii

Piața desofware locală a ajuns la un prim nivel de maturi-tate Există deja angajați ce au cincisprezece ani de experiențăicircn domeniu dar ponderea acestora este relativ scăzută Piața icircngeneral este tacircnără ără să avem icircncă programatori cărunți Dinperspectiva recrutării există o bătălie continuă pentru atragereatalentelor Din păcate sunt situații icircn care persoane și-au dedicat3-4 ani unui startup pentru a angajate Aceasta poate o pro-blemă dar pe de altă parte asimilarea culturii unei companii și omai bună icircnțelegere a procesului de dezvoltare a produselor poateduce icircn cacircțiva ani spre crearea unui startup cacircștigător

UniversitățileLa cele două universități clujene Babeș-Bolyai și Universitatea

ehnică sunt pregătiți aproximativ 1000 de studenți pentru adeveni programatori Numărul acestora este mic comparativ cunecesitățiile pieței iar acest lucru este observat prin numărul dince icircn ce mai mare de companii care icircși deschid sucursale icircn alteorașe De asemenea se construiesc programe alternative precum42 r sau Ruby Girls

Importanța universităților și rolul lor icircn contextul dezvoltării

ermenul ecosistem din titlul este utilizat ca o meta oră a contextului economic clujean care stabilește relații stracircnse icircntreorganisme precum comunitatea I universități și sursele de nanțare Fiecare dintre acestea comunitatea I prin execuțieuniversitatea prin cercetare iar sursele locale de nanțare prin susținerea primelor două sunt implicate icircn crearea unei rețele

de interdependențe și condiționări Apariția startup-urilor icircn acest ecosistem este interpretată ca un instrument de măsurare a inovațieiși a culturii antreprenoriale

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 746

7wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

startup-urilor locale este relativ scăzut Icircncercăm prin evenimen-tul anual I Days wwwitdaysro și de asemenea prin revista

oday Sofware Magazine să promovăm cunoștiințele și proiectele

realizate de universități Acestea trebuie să se trans orme icircntr-unmotor al inovației și a ultimelor tehnologii similar cu ceea ce aceStand ord pentru Silicon Valley

InvestitoriiInvestițiile principale realizate pacircnă acum icircn zona startup-

urilor au ost reprezentate de către cele două acceleratoare dinBulgaria Eleven și LAUNCHub Cinci startup-uri locale au pri-mit investiții de aproximativ 30000 euro dar din păcate toate au

ost icircnchise Dintre icircnvățămintele pe care le putem valorica dinaceastă abordare le semnalăm pe acelea că banii acordați au ostinsucienți pentru atingerea pragului de a acere protabilă ideal

la un nivel internațional și pe acela că necesitățile proiectelor nuau ost acoperite icircn ceea ce privește partea de development mar-keting sau legal

CrowdsourcingReprezintă o alternativă simplă de nanțare Cele două plat-

orme locale Creștem Idei și Multinanțare nu reușit să atragăpublicul larg icircntr-o măsură mare Proiectele și sumele nanțateast el ind la un nivel redus Recent proiectul Multinanțare a rea-lizat o colaborare cu Universitatea Babeș-Balyai prin crearea unuiportal pentru sprijinirea proiectelor academice

Angel investorsDacă acem o paralelă cu alte centre de dezvoltare o parte din

sumele cu care sunt nanțate inițiativele locale vin de la cei ce aurealizat un exit Putem să icirci enumerăm ast el pe Phillip Kandalunul dintre cei patru ondatori ai Skobbler și pe Daniel Metz celcare a vacircndut compania EBS către N Data Deocamdată cei doinu au anunțat vreo investiție icircn zona de I dar ne așteptăm caacest lucru să se icircntacircmple icircn următorul an

AcceleratoareGemini Solutions Foundry vine cu o abordare di erită

Acceleratorul o eră tot ce este nevoie pentru a aduce startup-ul lastadiul de MVP Aceasta icircnseamnă suport tehnic mentorat suport

legal chiar și spațiu de lucru central icircn București Cluj sau IașiScopul acestui MVP este prezentarea startup-urilor unor marionduri de investiții din SUA icircn vederea obținerii nanțării Icircn

momentul de ață căutările și selecția candidaților este icircn plinădes ășurare

Proiecte socialeO alternativă mai populară icircn special pentru companiile de

I ce activează icircn zona outsourcing-ului și doresc orientarea către

produse o reprezintă proiectele sociale Ast el se realizează un pro-iect gratuit pentru comunitate Un exemplu sugestiv este aplicațiaStatui de daci care promovează lucrarea istoricului LeonardVelcescu

Pe plan local se poate prota de oportunitatea o erită anul vii-tor de Cluj atunci cacircnd acesta va avea titlul de Capitala Europeanăa ineretului

Realizarea unui ast el de proiect va icircnsemna un plus pentrucomunitate dar și un mod simplu de a promova un brand și de atrece prin provocările dezvoltării unui produs

Alte structuri

Cluj IT ClusterEste alcătuit dintr-un grup de companii romacircnești avacircnd

ca scop principal atragerea unor mari proiecte ce nu ar putea realizate de o singură companie Icircn același timp se realizează ocomunicare e icientă icircntre companiile implicate creacircndu-secondițiile pentru o mai bună coordonare mai bună a acțiunilorEvenimentul anual organizat de către cluster Cluj I InnovationDays a adus icircmpreună companiile locale reprezentanți ai guver-nului ai Uniuni Europene precum și proiecte de cercetare Recentrevista oday Sofware Magazine icircmpreună cu Cluj I Cluster amorganizat icircn Brașov evenimentulIT-ul Brașovean Oportunități decolaborare Acesta s-a bucurat de un interes real din partea publi-cului și intenționăm să mai avem ast el de evenimente

StartupWeekendEste un eveniment dedicat 100 creării startup-urilor Dacă

nu ați participat pacircnă acum la un ast el de eveniment vă sugerezsă o aceți Sunt acceptate doar ideile noi iar echipele se ormeazăicircn jurul celor mai populare pitch-uri Este un enomen global șimulte startup-uri au luat naștere icircn elul acesta Cacircștigătorii dinultimi trei ani sunt Mircea Vădan cu plat orma Use ogetherechipa Cloud Copy iar cacircștigătoarea de anul acesta a ost o vechecolaboratoare a revistei Antonia Onaca cu o idee ce ar trebui săschimbe modul icircn care sunt evaluați angajații

Hackaton-ul Techsylvania Organizat icircn cadrul primei ediții a echsylvania acesta a pus

la dispoziția participanților diverse dispozitive mobile precumGoogle Glasses Leap Motion Sphero Little Printer Pebble și

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 846

8 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

multe altele Rezultatul a ost spectaculos miniproiectele reali-zate ind cu adevărat interesante Acestea au combinat olosireaGoogle Glasses icircmpreună cu Leap Motion pentru realizarea unui joc sau tastarea unui cod la bancomat prin monitorizarea mișcăriiochilor Probabil o combinație de Startup Weekend și hackaton icircncare sunt puse la dispoziție ultimele gadget-uri disponibile ar ducela crearea unor startup-uri cu adevărat inovative

Today Software Magazine și IT DaysUnul dintre scopurile declarate icircncă de la lansarea revistei a

ost sprijinirea startup-urilor Revista oday Sofware Magazinesprijină majoritatea inițiativelor din această zonă și ajutăm la pro-movarea acestora De asemenea prin evenimentul anual I Daysce va avea loc icircn 3-4 decembrie anul acesta vom aduce pe scenăcele mai importante startup-uri locale

ConcluziiFenomenul startup-urilor și orientarea companiilor ce

activează icircn zona outsourcing spre crearea de produse sunt icircn

continuă creștere Deși nu putem da un exemplu de succes realne așteptăm să putem ace acest lucru icircn curacircnd Mă bucur săputem da un exemplu real compania ondată de doi clujeni și unamerican LiveRail a ost recent achiziționată de către FacebookAceasta demonstrează ără echivoc valoarea ecosistemului localși a educației

S atul pe care icircl dăm celor ce vor să icircși creeze un startup estesă participe la cacirct de multe evenimente locale și internaționalerelațiile personale iind oarte importante la icircnceput de drumEste puțin probabil că ideea ta va schimba lumea macircine dacă nuinteracționezi cu multă lume

Există multe oportunități pe care le remarcăm mai ales icircn

aptul că programatorii vor din ce icircn ce mai mult să icircși creeze pro-dusele proprii iar acceleratoarele locale icircncep să icircși acă simțităprezența Prin produsele dezvoltate icircn outsourcing sau parte dintr-o mare corporație s-a demonstrat aptul că tehnic putem realizaorice din păcate din cauza condențialității majoritatea dintreele nu pot ăcute publice Universitățile devin din ce icircn ce maideschise icircn comunicarea cu specialiștii ce nu sunt parte a lumiiacademice și sperăm să vedem icircn curacircnd mai multe cursuri despreantreprenoriat și de ce nu chiar un accelerator pentru studenți icircncare practica și cercetarea se reunesc

Startup-uri clujeneIcircn continuare vă propun o listă de startup-uri locale ce merită

să e urmărite Mulțumesc lui Mircea Vădan și lui Marius Morneapentru realizarea acesteia Icircn numerele următoare vom reveni cuun in ograc

Squirrly 1 - Este un plugin SEO de wordpress Compania a osticircnințată de către Florin Mureșan și se bucură deja de un numărmare de clienți De asemenea este sprinjinit de către PhillipKandal co- ondator Skobbler

HackaServer2 și C F3653 - un vechi startup clujean condus decătre Marius Coracircci și Marius Chiș Acesta se adreseazăhacker -ilor ce doresc o provocare legală și administratorilor de sisteme cedoresc o icircmbunătățire a securității printr-o testarea reală

HipMenu4

- este o aplicație ce se adresează celor ce vor1 httpwwwsquirrlyco

2 httphackaservercom

3 httpct 365com

4 httpswwwhipmenuro

să comande macircncare la birou sau acasă Marius Mocian unsusținător local a startup-urilor este parte din această echipă

Evolso5 - un startup pornit de către Alin Stănescu și este acumparte din programul de accelerare de la StartupYard

Mira Rehub6 - unul dintre cele mai promițătoare startup-urilocale Au realizat un sistem de recuperare a celor cu problemelocomotorii olosind senzorul Kinect

Mockups7 - implementeză creearea demockup-uri online avacircnd o bază mare de useri online

5 httpwwwevolsocom

6 httpwwwmirarehabcom

7 httpsmoqupscom

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Ecosistemul IT Clujean din perspectiva startup-urilor

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 946

9wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1046

10 nr 25Iulie 2014 | wwwtodaysoftmagro

RICAP a luat naștere din dorința de

a o eri resurse inovatorilor din Romacircniapentru a ieși pe piețe internaționale cu pro-dusele lor e că este vorba despre energiebio-tehnologii agricultură IC sau oricealt domeniu tehnologic RICAP este ast elprimul program din Romacircnia care sprijinăinovatorii și antreprenorii cu tehnologiiinovatoare să le comercializeze pe piața glo-bală acilitacircnd drumul din laborator cătrepiață Icircn acest e ort programul se bazeazăpe un parteneriat internațional cu unuldintre cele mai importante institute din

SUA care sprijină comercializarea inovării-Larta Institute pe legăturile internaționaleși know-how-ul acestei rețele precum și perețeaua de mentori pe care o consolidăm lanivel local

bdquoCacircnd se vorbește despre problemelebusiness-urilor și startup-urilor eu spun de ecare dată că și banii sunt o parte a pro-blemei dar cea mai importantă problemăeste lipsa de know-how() Experiența pecare am avut-o icircn programul RICAP a osticircn primul racircnd o experiență de coachingDe-asta am și intrat asta am căutat unmediu care să mă icircncurajeze să studiez eudupă programul pe care icircl voiam eu după prioritățile pe care consideram că le avemși să atacăm problemele pas cu pas rdquo DanielHomorodean director Arxia antreprenorparticipant icircn program

Aplicațiile se aconline pacircnă pe 31 iulie2014 direct pesite-ul programuluiwwwricapro

Ce s-a icircntacircmplat pacircnă acumPrima ediție a RICAP a avut loc icircn peri-

oada ianuarie ndash mai 2014 Icircn acest timp15inovatoriau lucrat alături de o echipă dedi-cată dementori și advisoriextraordinariicircntr-un program de mentorat personalizat

pentru a dezvolta și implementainstru-

mente de comercializare strategii deintrare pe piață strategii de comerciali-zare prezentări pentru clienți Icircn uncțiede nivelul de dezvoltare al companiilorprogramul a acilitat peste 30 de legă-turi strategice cu posibili parteneri șinanțatori din SUA și din Europa inclu-siv membri ai Fortune 1000 din IndustryAdvisory Board-ul Larta partenerul ameri-can al programului Icircn plus două companiiau ost icircn Statele Unite unde au beneciatde aproximativ 15 icircntacirclniri de business cu

posibili parteneri și nanțatoriExperiența a ost di erită pentru cei 15participanți

ldquoAcest program se poate adapta la nevo-ile participanților oriunde v-ați a la icircnspectrul de la pur om de știință pacircnă la omde businessrdquo Alexandru Floareș SAIA șiOnco Predict om de știinta și antreprenorparticipant la RICAP

La icircnceputul lunii iunie am lansat adoua ediție RICAP icircn cadrul căreia am avutevenimente și icircntacirclniri icircn mai multe orașeale țării Am avut ocazia să cunoașteminovatori pasionați și cu viziune care audezvoltat produse incredibile

Icircntacirclnirile cu toți acești oameni șidiscuțiile vibrante pe care le-am avut cumulți dintre ei ne-au validat că ceea ce

acem la RICAP le poate o eri un sprijinreal atacirct lor cacirct și utilizatorilor produselorlor

Un rol cheie icircn prima ediție RICAPl-au avut alături de inovatorii selectați icircn

program mentorii romacircni care le-au ostalături și i-au sprijinit icircn denirea viziuniiși strategiei de comercializare și nu numai

I-am avut alături de noi pe Andrei

Pitiș pro esor antreprenorbusiness angel

și neobosit susținător al ecosistemului ino- vării și al start-up-urilortech din Romacircniape Norina Boru antreprenor și consultantcu o vastă experiență icircn domeniul medicaldin Romacircnia și la nivel internațional Deasemenea icirci menționăm pe Alex MirceaDascălu un antrepenor și consultant cuexperiență internațională și pe SandaFoameteeducation lead la Microsof

Mai multe despre mentori cacirct și despreinovatorii care au participat la prima edițeRICAP puteți citi pewwwricaproblog

Cine suntemRICAP este rezultatul unui par-

teneriat icircntre Centrul Romacircn pentruInovație icircn Dezvoltare Locală (CRIDL)și Institutul Larta localizat icircn LosAngeles SUA Programul este nanțat deRomanian-American Foundation (RAF) șiimplementat cu sprijinul GEA Strategy ampConsulting RICAP construiește pe rețeauainternațională și expertiza acumulatătimp de 20 de ani de Larta Institute prinsusținerea a circa 9700 de inovatori din 17țări

Contactwwwricapro | wwwricaproblog |

FacebookLinkedIn RICAP - Innovationrom lab to market | contactricapro

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

eveniment

RICAP drumul inovației de la laborator către piețe glob

La icircnceputul lunii iunie s-au lansat aplicațiile pentru cea de-a doua ediție a Programului de Asistență icircn Comercializarea Inovăriidin Romacircnia (RICAP)

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 646

6 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

Ecosistemul IT Clujean din perspectiva startup-urilor

Deși primii pași ăcuți icircn această direcție sunt relativtimizi importanța acordată acestora și susținerea locală sunt icircncreștere Multe dintre evenimentele locale din zona I -ului au osecțiune dedicată startup-urilor Cluj Innovation Days I Days

echsylvania Același trend icircl regăsim chiar și icircn cadrul unor eve-nimente cu caracter mai extins precum Cluj Business Days sau

edX oate acestea arată importanța acordată de comunitatedezvoltării unor produse locale generarea acelui IP (IntellectualProperty) ce o eră local o mai bună stabilitate și un mare potențialde dezvoltare Pentru succesul unui startup icircntr-o piață globalăeste nevoie icircnsă de un icircntreg ecosistem care să ajute creșterea aces-tuia de la idee pacircnă la implementare vizibilitate și prot VictorHwang a denit icircntr-un mod oarte plastic imaginea de ansam-blu Industria clasică de outsourcing poate considerată o ermăicircn care semințele plantate cresc oarte repede au toate aceeașidimensiune excepțiile sunt puține și icircn general nu reprezintă unlucru benec Alternativ icircntr-o pădure semințele plantate deși auo mică șansă de supraviețuire pot ajunge niște copaci masivi care

să existe pentru multă vreme Icircn acest mediu este icircn regulă să daigreș iar acest lucru duce la diversitate icircn opoziție cu erma undetoate semințele trebuie să devină plante mature Icircn ambele exem-ple ceea ce contează cel mai mult este solul icircn care aceste semințecresc și care pentru noi reprezintă ecosistemul Dezvoltarea unorproduse noi icircnseamnă comunicare icircncredere și icircmpărtășireaexperiențelor acumulate

Vom analiza icircn continuare principalii actori ce denesc eco-sistemul de I clujean

Comunitatea ITEste alcătuită icircn majoritatea lor de companii de I ce dezvoltă

produse de outsourcing Există cacircteva excepții locale dintre careaș menționa două aparținacircnd industriei jocurilor Exosyphen șiIdea Studio dar și pe cele ale unor companii mari precum Arobssau Skobbler acum devenit elenav

Un număr important de companii sunt și cele care sunt partedintr-o companie internațională auownership pe produsele dez- voltate și există o divizie locală de RampD Numărul acestora este icircncreștere și putem enumera cacircteva dintre ele precum Bet air Yardi

ora HP Ullink SDL sau GamelofO categorie interesantă o reprezintă companiile care activau pe

piața locală și care au ost achiziționate și care se icircnglobează ast el

icircntr-o piață globală N Data ce a achiziționat EBS Accenture acumpărat Evoline startup-ul Nok a ost luat de Intel sau Skobblerachiziționat de elenav

Din perspectiva dezvoltării personale outsourcing-ul o erăposibilitatea de a lucra la proiecte importante precum și asimila-rea unei părți din cultura clienților a modului acestora de lucru

Din perspectiva mai generală a corporațiilor outsourcing-ul o erăaccesul la o parte din cultura celorlalte corporații comunicareaicircntre di eritele proiecte dar șimeeting -uri cu echipele din di eri-tele colțuri ale lumii

Dacă acum zece ani icircn Cluj exista doar simplă execuție acumavem de-a ace cu unownership din ce icircn ce mai extins Icircn generalarhitectura sistemelor se ace acum local iar product manageri-i șianaliștii de bussines sunt la mare căutare Acest apt icircnseamnă șimultă icircncredere și recunoaștere a calității sofware-ului dezvoltaticircn Cluj iar tendința este de a pune accent pe calitate icircn de avoa-rea costurilor De alt el costurile din ce icircn ce mai ridicate ce sereectă și icircn salariile programatorilor reprezintă și un impedi-

ment important icircn dezvoltarea startup-urilor otodată creeazăacea comoditate aleasă de majoritatea icircn detrimentul icircncercării dedezvoltare a unor produse proprii

Piața desofware locală a ajuns la un prim nivel de maturi-tate Există deja angajați ce au cincisprezece ani de experiențăicircn domeniu dar ponderea acestora este relativ scăzută Piața icircngeneral este tacircnără ără să avem icircncă programatori cărunți Dinperspectiva recrutării există o bătălie continuă pentru atragereatalentelor Din păcate sunt situații icircn care persoane și-au dedicat3-4 ani unui startup pentru a angajate Aceasta poate o pro-blemă dar pe de altă parte asimilarea culturii unei companii și omai bună icircnțelegere a procesului de dezvoltare a produselor poateduce icircn cacircțiva ani spre crearea unui startup cacircștigător

UniversitățileLa cele două universități clujene Babeș-Bolyai și Universitatea

ehnică sunt pregătiți aproximativ 1000 de studenți pentru adeveni programatori Numărul acestora este mic comparativ cunecesitățiile pieței iar acest lucru este observat prin numărul dince icircn ce mai mare de companii care icircși deschid sucursale icircn alteorașe De asemenea se construiesc programe alternative precum42 r sau Ruby Girls

Importanța universităților și rolul lor icircn contextul dezvoltării

ermenul ecosistem din titlul este utilizat ca o meta oră a contextului economic clujean care stabilește relații stracircnse icircntreorganisme precum comunitatea I universități și sursele de nanțare Fiecare dintre acestea comunitatea I prin execuțieuniversitatea prin cercetare iar sursele locale de nanțare prin susținerea primelor două sunt implicate icircn crearea unei rețele

de interdependențe și condiționări Apariția startup-urilor icircn acest ecosistem este interpretată ca un instrument de măsurare a inovațieiși a culturii antreprenoriale

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 746

7wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

startup-urilor locale este relativ scăzut Icircncercăm prin evenimen-tul anual I Days wwwitdaysro și de asemenea prin revista

oday Sofware Magazine să promovăm cunoștiințele și proiectele

realizate de universități Acestea trebuie să se trans orme icircntr-unmotor al inovației și a ultimelor tehnologii similar cu ceea ce aceStand ord pentru Silicon Valley

InvestitoriiInvestițiile principale realizate pacircnă acum icircn zona startup-

urilor au ost reprezentate de către cele două acceleratoare dinBulgaria Eleven și LAUNCHub Cinci startup-uri locale au pri-mit investiții de aproximativ 30000 euro dar din păcate toate au

ost icircnchise Dintre icircnvățămintele pe care le putem valorica dinaceastă abordare le semnalăm pe acelea că banii acordați au ostinsucienți pentru atingerea pragului de a acere protabilă ideal

la un nivel internațional și pe acela că necesitățile proiectelor nuau ost acoperite icircn ceea ce privește partea de development mar-keting sau legal

CrowdsourcingReprezintă o alternativă simplă de nanțare Cele două plat-

orme locale Creștem Idei și Multinanțare nu reușit să atragăpublicul larg icircntr-o măsură mare Proiectele și sumele nanțateast el ind la un nivel redus Recent proiectul Multinanțare a rea-lizat o colaborare cu Universitatea Babeș-Balyai prin crearea unuiportal pentru sprijinirea proiectelor academice

Angel investorsDacă acem o paralelă cu alte centre de dezvoltare o parte din

sumele cu care sunt nanțate inițiativele locale vin de la cei ce aurealizat un exit Putem să icirci enumerăm ast el pe Phillip Kandalunul dintre cei patru ondatori ai Skobbler și pe Daniel Metz celcare a vacircndut compania EBS către N Data Deocamdată cei doinu au anunțat vreo investiție icircn zona de I dar ne așteptăm caacest lucru să se icircntacircmple icircn următorul an

AcceleratoareGemini Solutions Foundry vine cu o abordare di erită

Acceleratorul o eră tot ce este nevoie pentru a aduce startup-ul lastadiul de MVP Aceasta icircnseamnă suport tehnic mentorat suport

legal chiar și spațiu de lucru central icircn București Cluj sau IașiScopul acestui MVP este prezentarea startup-urilor unor marionduri de investiții din SUA icircn vederea obținerii nanțării Icircn

momentul de ață căutările și selecția candidaților este icircn plinădes ășurare

Proiecte socialeO alternativă mai populară icircn special pentru companiile de

I ce activează icircn zona outsourcing-ului și doresc orientarea către

produse o reprezintă proiectele sociale Ast el se realizează un pro-iect gratuit pentru comunitate Un exemplu sugestiv este aplicațiaStatui de daci care promovează lucrarea istoricului LeonardVelcescu

Pe plan local se poate prota de oportunitatea o erită anul vii-tor de Cluj atunci cacircnd acesta va avea titlul de Capitala Europeanăa ineretului

Realizarea unui ast el de proiect va icircnsemna un plus pentrucomunitate dar și un mod simplu de a promova un brand și de atrece prin provocările dezvoltării unui produs

Alte structuri

Cluj IT ClusterEste alcătuit dintr-un grup de companii romacircnești avacircnd

ca scop principal atragerea unor mari proiecte ce nu ar putea realizate de o singură companie Icircn același timp se realizează ocomunicare e icientă icircntre companiile implicate creacircndu-secondițiile pentru o mai bună coordonare mai bună a acțiunilorEvenimentul anual organizat de către cluster Cluj I InnovationDays a adus icircmpreună companiile locale reprezentanți ai guver-nului ai Uniuni Europene precum și proiecte de cercetare Recentrevista oday Sofware Magazine icircmpreună cu Cluj I Cluster amorganizat icircn Brașov evenimentulIT-ul Brașovean Oportunități decolaborare Acesta s-a bucurat de un interes real din partea publi-cului și intenționăm să mai avem ast el de evenimente

StartupWeekendEste un eveniment dedicat 100 creării startup-urilor Dacă

nu ați participat pacircnă acum la un ast el de eveniment vă sugerezsă o aceți Sunt acceptate doar ideile noi iar echipele se ormeazăicircn jurul celor mai populare pitch-uri Este un enomen global șimulte startup-uri au luat naștere icircn elul acesta Cacircștigătorii dinultimi trei ani sunt Mircea Vădan cu plat orma Use ogetherechipa Cloud Copy iar cacircștigătoarea de anul acesta a ost o vechecolaboratoare a revistei Antonia Onaca cu o idee ce ar trebui săschimbe modul icircn care sunt evaluați angajații

Hackaton-ul Techsylvania Organizat icircn cadrul primei ediții a echsylvania acesta a pus

la dispoziția participanților diverse dispozitive mobile precumGoogle Glasses Leap Motion Sphero Little Printer Pebble și

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 846

8 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

multe altele Rezultatul a ost spectaculos miniproiectele reali-zate ind cu adevărat interesante Acestea au combinat olosireaGoogle Glasses icircmpreună cu Leap Motion pentru realizarea unui joc sau tastarea unui cod la bancomat prin monitorizarea mișcăriiochilor Probabil o combinație de Startup Weekend și hackaton icircncare sunt puse la dispoziție ultimele gadget-uri disponibile ar ducela crearea unor startup-uri cu adevărat inovative

Today Software Magazine și IT DaysUnul dintre scopurile declarate icircncă de la lansarea revistei a

ost sprijinirea startup-urilor Revista oday Sofware Magazinesprijină majoritatea inițiativelor din această zonă și ajutăm la pro-movarea acestora De asemenea prin evenimentul anual I Daysce va avea loc icircn 3-4 decembrie anul acesta vom aduce pe scenăcele mai importante startup-uri locale

ConcluziiFenomenul startup-urilor și orientarea companiilor ce

activează icircn zona outsourcing spre crearea de produse sunt icircn

continuă creștere Deși nu putem da un exemplu de succes realne așteptăm să putem ace acest lucru icircn curacircnd Mă bucur săputem da un exemplu real compania ondată de doi clujeni și unamerican LiveRail a ost recent achiziționată de către FacebookAceasta demonstrează ără echivoc valoarea ecosistemului localși a educației

S atul pe care icircl dăm celor ce vor să icircși creeze un startup estesă participe la cacirct de multe evenimente locale și internaționalerelațiile personale iind oarte importante la icircnceput de drumEste puțin probabil că ideea ta va schimba lumea macircine dacă nuinteracționezi cu multă lume

Există multe oportunități pe care le remarcăm mai ales icircn

aptul că programatorii vor din ce icircn ce mai mult să icircși creeze pro-dusele proprii iar acceleratoarele locale icircncep să icircși acă simțităprezența Prin produsele dezvoltate icircn outsourcing sau parte dintr-o mare corporație s-a demonstrat aptul că tehnic putem realizaorice din păcate din cauza condențialității majoritatea dintreele nu pot ăcute publice Universitățile devin din ce icircn ce maideschise icircn comunicarea cu specialiștii ce nu sunt parte a lumiiacademice și sperăm să vedem icircn curacircnd mai multe cursuri despreantreprenoriat și de ce nu chiar un accelerator pentru studenți icircncare practica și cercetarea se reunesc

Startup-uri clujeneIcircn continuare vă propun o listă de startup-uri locale ce merită

să e urmărite Mulțumesc lui Mircea Vădan și lui Marius Morneapentru realizarea acesteia Icircn numerele următoare vom reveni cuun in ograc

Squirrly 1 - Este un plugin SEO de wordpress Compania a osticircnințată de către Florin Mureșan și se bucură deja de un numărmare de clienți De asemenea este sprinjinit de către PhillipKandal co- ondator Skobbler

HackaServer2 și C F3653 - un vechi startup clujean condus decătre Marius Coracircci și Marius Chiș Acesta se adreseazăhacker -ilor ce doresc o provocare legală și administratorilor de sisteme cedoresc o icircmbunătățire a securității printr-o testarea reală

HipMenu4

- este o aplicație ce se adresează celor ce vor1 httpwwwsquirrlyco

2 httphackaservercom

3 httpct 365com

4 httpswwwhipmenuro

să comande macircncare la birou sau acasă Marius Mocian unsusținător local a startup-urilor este parte din această echipă

Evolso5 - un startup pornit de către Alin Stănescu și este acumparte din programul de accelerare de la StartupYard

Mira Rehub6 - unul dintre cele mai promițătoare startup-urilocale Au realizat un sistem de recuperare a celor cu problemelocomotorii olosind senzorul Kinect

Mockups7 - implementeză creearea demockup-uri online avacircnd o bază mare de useri online

5 httpwwwevolsocom

6 httpwwwmirarehabcom

7 httpsmoqupscom

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Ecosistemul IT Clujean din perspectiva startup-urilor

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 946

9wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1046

10 nr 25Iulie 2014 | wwwtodaysoftmagro

RICAP a luat naștere din dorința de

a o eri resurse inovatorilor din Romacircniapentru a ieși pe piețe internaționale cu pro-dusele lor e că este vorba despre energiebio-tehnologii agricultură IC sau oricealt domeniu tehnologic RICAP este ast elprimul program din Romacircnia care sprijinăinovatorii și antreprenorii cu tehnologiiinovatoare să le comercializeze pe piața glo-bală acilitacircnd drumul din laborator cătrepiață Icircn acest e ort programul se bazeazăpe un parteneriat internațional cu unuldintre cele mai importante institute din

SUA care sprijină comercializarea inovării-Larta Institute pe legăturile internaționaleși know-how-ul acestei rețele precum și perețeaua de mentori pe care o consolidăm lanivel local

bdquoCacircnd se vorbește despre problemelebusiness-urilor și startup-urilor eu spun de ecare dată că și banii sunt o parte a pro-blemei dar cea mai importantă problemăeste lipsa de know-how() Experiența pecare am avut-o icircn programul RICAP a osticircn primul racircnd o experiență de coachingDe-asta am și intrat asta am căutat unmediu care să mă icircncurajeze să studiez eudupă programul pe care icircl voiam eu după prioritățile pe care consideram că le avemși să atacăm problemele pas cu pas rdquo DanielHomorodean director Arxia antreprenorparticipant icircn program

Aplicațiile se aconline pacircnă pe 31 iulie2014 direct pesite-ul programuluiwwwricapro

Ce s-a icircntacircmplat pacircnă acumPrima ediție a RICAP a avut loc icircn peri-

oada ianuarie ndash mai 2014 Icircn acest timp15inovatoriau lucrat alături de o echipă dedi-cată dementori și advisoriextraordinariicircntr-un program de mentorat personalizat

pentru a dezvolta și implementainstru-

mente de comercializare strategii deintrare pe piață strategii de comerciali-zare prezentări pentru clienți Icircn uncțiede nivelul de dezvoltare al companiilorprogramul a acilitat peste 30 de legă-turi strategice cu posibili parteneri șinanțatori din SUA și din Europa inclu-siv membri ai Fortune 1000 din IndustryAdvisory Board-ul Larta partenerul ameri-can al programului Icircn plus două companiiau ost icircn Statele Unite unde au beneciatde aproximativ 15 icircntacirclniri de business cu

posibili parteneri și nanțatoriExperiența a ost di erită pentru cei 15participanți

ldquoAcest program se poate adapta la nevo-ile participanților oriunde v-ați a la icircnspectrul de la pur om de știință pacircnă la omde businessrdquo Alexandru Floareș SAIA șiOnco Predict om de știinta și antreprenorparticipant la RICAP

La icircnceputul lunii iunie am lansat adoua ediție RICAP icircn cadrul căreia am avutevenimente și icircntacirclniri icircn mai multe orașeale țării Am avut ocazia să cunoașteminovatori pasionați și cu viziune care audezvoltat produse incredibile

Icircntacirclnirile cu toți acești oameni șidiscuțiile vibrante pe care le-am avut cumulți dintre ei ne-au validat că ceea ce

acem la RICAP le poate o eri un sprijinreal atacirct lor cacirct și utilizatorilor produselorlor

Un rol cheie icircn prima ediție RICAPl-au avut alături de inovatorii selectați icircn

program mentorii romacircni care le-au ostalături și i-au sprijinit icircn denirea viziuniiși strategiei de comercializare și nu numai

I-am avut alături de noi pe Andrei

Pitiș pro esor antreprenorbusiness angel

și neobosit susținător al ecosistemului ino- vării și al start-up-urilortech din Romacircniape Norina Boru antreprenor și consultantcu o vastă experiență icircn domeniul medicaldin Romacircnia și la nivel internațional Deasemenea icirci menționăm pe Alex MirceaDascălu un antrepenor și consultant cuexperiență internațională și pe SandaFoameteeducation lead la Microsof

Mai multe despre mentori cacirct și despreinovatorii care au participat la prima edițeRICAP puteți citi pewwwricaproblog

Cine suntemRICAP este rezultatul unui par-

teneriat icircntre Centrul Romacircn pentruInovație icircn Dezvoltare Locală (CRIDL)și Institutul Larta localizat icircn LosAngeles SUA Programul este nanțat deRomanian-American Foundation (RAF) șiimplementat cu sprijinul GEA Strategy ampConsulting RICAP construiește pe rețeauainternațională și expertiza acumulatătimp de 20 de ani de Larta Institute prinsusținerea a circa 9700 de inovatori din 17țări

Contactwwwricapro | wwwricaproblog |

FacebookLinkedIn RICAP - Innovationrom lab to market | contactricapro

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

eveniment

RICAP drumul inovației de la laborator către piețe glob

La icircnceputul lunii iunie s-au lansat aplicațiile pentru cea de-a doua ediție a Programului de Asistență icircn Comercializarea Inovăriidin Romacircnia (RICAP)

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 746

7wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

startup-urilor locale este relativ scăzut Icircncercăm prin evenimen-tul anual I Days wwwitdaysro și de asemenea prin revista

oday Sofware Magazine să promovăm cunoștiințele și proiectele

realizate de universități Acestea trebuie să se trans orme icircntr-unmotor al inovației și a ultimelor tehnologii similar cu ceea ce aceStand ord pentru Silicon Valley

InvestitoriiInvestițiile principale realizate pacircnă acum icircn zona startup-

urilor au ost reprezentate de către cele două acceleratoare dinBulgaria Eleven și LAUNCHub Cinci startup-uri locale au pri-mit investiții de aproximativ 30000 euro dar din păcate toate au

ost icircnchise Dintre icircnvățămintele pe care le putem valorica dinaceastă abordare le semnalăm pe acelea că banii acordați au ostinsucienți pentru atingerea pragului de a acere protabilă ideal

la un nivel internațional și pe acela că necesitățile proiectelor nuau ost acoperite icircn ceea ce privește partea de development mar-keting sau legal

CrowdsourcingReprezintă o alternativă simplă de nanțare Cele două plat-

orme locale Creștem Idei și Multinanțare nu reușit să atragăpublicul larg icircntr-o măsură mare Proiectele și sumele nanțateast el ind la un nivel redus Recent proiectul Multinanțare a rea-lizat o colaborare cu Universitatea Babeș-Balyai prin crearea unuiportal pentru sprijinirea proiectelor academice

Angel investorsDacă acem o paralelă cu alte centre de dezvoltare o parte din

sumele cu care sunt nanțate inițiativele locale vin de la cei ce aurealizat un exit Putem să icirci enumerăm ast el pe Phillip Kandalunul dintre cei patru ondatori ai Skobbler și pe Daniel Metz celcare a vacircndut compania EBS către N Data Deocamdată cei doinu au anunțat vreo investiție icircn zona de I dar ne așteptăm caacest lucru să se icircntacircmple icircn următorul an

AcceleratoareGemini Solutions Foundry vine cu o abordare di erită

Acceleratorul o eră tot ce este nevoie pentru a aduce startup-ul lastadiul de MVP Aceasta icircnseamnă suport tehnic mentorat suport

legal chiar și spațiu de lucru central icircn București Cluj sau IașiScopul acestui MVP este prezentarea startup-urilor unor marionduri de investiții din SUA icircn vederea obținerii nanțării Icircn

momentul de ață căutările și selecția candidaților este icircn plinădes ășurare

Proiecte socialeO alternativă mai populară icircn special pentru companiile de

I ce activează icircn zona outsourcing-ului și doresc orientarea către

produse o reprezintă proiectele sociale Ast el se realizează un pro-iect gratuit pentru comunitate Un exemplu sugestiv este aplicațiaStatui de daci care promovează lucrarea istoricului LeonardVelcescu

Pe plan local se poate prota de oportunitatea o erită anul vii-tor de Cluj atunci cacircnd acesta va avea titlul de Capitala Europeanăa ineretului

Realizarea unui ast el de proiect va icircnsemna un plus pentrucomunitate dar și un mod simplu de a promova un brand și de atrece prin provocările dezvoltării unui produs

Alte structuri

Cluj IT ClusterEste alcătuit dintr-un grup de companii romacircnești avacircnd

ca scop principal atragerea unor mari proiecte ce nu ar putea realizate de o singură companie Icircn același timp se realizează ocomunicare e icientă icircntre companiile implicate creacircndu-secondițiile pentru o mai bună coordonare mai bună a acțiunilorEvenimentul anual organizat de către cluster Cluj I InnovationDays a adus icircmpreună companiile locale reprezentanți ai guver-nului ai Uniuni Europene precum și proiecte de cercetare Recentrevista oday Sofware Magazine icircmpreună cu Cluj I Cluster amorganizat icircn Brașov evenimentulIT-ul Brașovean Oportunități decolaborare Acesta s-a bucurat de un interes real din partea publi-cului și intenționăm să mai avem ast el de evenimente

StartupWeekendEste un eveniment dedicat 100 creării startup-urilor Dacă

nu ați participat pacircnă acum la un ast el de eveniment vă sugerezsă o aceți Sunt acceptate doar ideile noi iar echipele se ormeazăicircn jurul celor mai populare pitch-uri Este un enomen global șimulte startup-uri au luat naștere icircn elul acesta Cacircștigătorii dinultimi trei ani sunt Mircea Vădan cu plat orma Use ogetherechipa Cloud Copy iar cacircștigătoarea de anul acesta a ost o vechecolaboratoare a revistei Antonia Onaca cu o idee ce ar trebui săschimbe modul icircn care sunt evaluați angajații

Hackaton-ul Techsylvania Organizat icircn cadrul primei ediții a echsylvania acesta a pus

la dispoziția participanților diverse dispozitive mobile precumGoogle Glasses Leap Motion Sphero Little Printer Pebble și

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 846

8 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

multe altele Rezultatul a ost spectaculos miniproiectele reali-zate ind cu adevărat interesante Acestea au combinat olosireaGoogle Glasses icircmpreună cu Leap Motion pentru realizarea unui joc sau tastarea unui cod la bancomat prin monitorizarea mișcăriiochilor Probabil o combinație de Startup Weekend și hackaton icircncare sunt puse la dispoziție ultimele gadget-uri disponibile ar ducela crearea unor startup-uri cu adevărat inovative

Today Software Magazine și IT DaysUnul dintre scopurile declarate icircncă de la lansarea revistei a

ost sprijinirea startup-urilor Revista oday Sofware Magazinesprijină majoritatea inițiativelor din această zonă și ajutăm la pro-movarea acestora De asemenea prin evenimentul anual I Daysce va avea loc icircn 3-4 decembrie anul acesta vom aduce pe scenăcele mai importante startup-uri locale

ConcluziiFenomenul startup-urilor și orientarea companiilor ce

activează icircn zona outsourcing spre crearea de produse sunt icircn

continuă creștere Deși nu putem da un exemplu de succes realne așteptăm să putem ace acest lucru icircn curacircnd Mă bucur săputem da un exemplu real compania ondată de doi clujeni și unamerican LiveRail a ost recent achiziționată de către FacebookAceasta demonstrează ără echivoc valoarea ecosistemului localși a educației

S atul pe care icircl dăm celor ce vor să icircși creeze un startup estesă participe la cacirct de multe evenimente locale și internaționalerelațiile personale iind oarte importante la icircnceput de drumEste puțin probabil că ideea ta va schimba lumea macircine dacă nuinteracționezi cu multă lume

Există multe oportunități pe care le remarcăm mai ales icircn

aptul că programatorii vor din ce icircn ce mai mult să icircși creeze pro-dusele proprii iar acceleratoarele locale icircncep să icircși acă simțităprezența Prin produsele dezvoltate icircn outsourcing sau parte dintr-o mare corporație s-a demonstrat aptul că tehnic putem realizaorice din păcate din cauza condențialității majoritatea dintreele nu pot ăcute publice Universitățile devin din ce icircn ce maideschise icircn comunicarea cu specialiștii ce nu sunt parte a lumiiacademice și sperăm să vedem icircn curacircnd mai multe cursuri despreantreprenoriat și de ce nu chiar un accelerator pentru studenți icircncare practica și cercetarea se reunesc

Startup-uri clujeneIcircn continuare vă propun o listă de startup-uri locale ce merită

să e urmărite Mulțumesc lui Mircea Vădan și lui Marius Morneapentru realizarea acesteia Icircn numerele următoare vom reveni cuun in ograc

Squirrly 1 - Este un plugin SEO de wordpress Compania a osticircnințată de către Florin Mureșan și se bucură deja de un numărmare de clienți De asemenea este sprinjinit de către PhillipKandal co- ondator Skobbler

HackaServer2 și C F3653 - un vechi startup clujean condus decătre Marius Coracircci și Marius Chiș Acesta se adreseazăhacker -ilor ce doresc o provocare legală și administratorilor de sisteme cedoresc o icircmbunătățire a securității printr-o testarea reală

HipMenu4

- este o aplicație ce se adresează celor ce vor1 httpwwwsquirrlyco

2 httphackaservercom

3 httpct 365com

4 httpswwwhipmenuro

să comande macircncare la birou sau acasă Marius Mocian unsusținător local a startup-urilor este parte din această echipă

Evolso5 - un startup pornit de către Alin Stănescu și este acumparte din programul de accelerare de la StartupYard

Mira Rehub6 - unul dintre cele mai promițătoare startup-urilocale Au realizat un sistem de recuperare a celor cu problemelocomotorii olosind senzorul Kinect

Mockups7 - implementeză creearea demockup-uri online avacircnd o bază mare de useri online

5 httpwwwevolsocom

6 httpwwwmirarehabcom

7 httpsmoqupscom

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Ecosistemul IT Clujean din perspectiva startup-urilor

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 946

9wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1046

10 nr 25Iulie 2014 | wwwtodaysoftmagro

RICAP a luat naștere din dorința de

a o eri resurse inovatorilor din Romacircniapentru a ieși pe piețe internaționale cu pro-dusele lor e că este vorba despre energiebio-tehnologii agricultură IC sau oricealt domeniu tehnologic RICAP este ast elprimul program din Romacircnia care sprijinăinovatorii și antreprenorii cu tehnologiiinovatoare să le comercializeze pe piața glo-bală acilitacircnd drumul din laborator cătrepiață Icircn acest e ort programul se bazeazăpe un parteneriat internațional cu unuldintre cele mai importante institute din

SUA care sprijină comercializarea inovării-Larta Institute pe legăturile internaționaleși know-how-ul acestei rețele precum și perețeaua de mentori pe care o consolidăm lanivel local

bdquoCacircnd se vorbește despre problemelebusiness-urilor și startup-urilor eu spun de ecare dată că și banii sunt o parte a pro-blemei dar cea mai importantă problemăeste lipsa de know-how() Experiența pecare am avut-o icircn programul RICAP a osticircn primul racircnd o experiență de coachingDe-asta am și intrat asta am căutat unmediu care să mă icircncurajeze să studiez eudupă programul pe care icircl voiam eu după prioritățile pe care consideram că le avemși să atacăm problemele pas cu pas rdquo DanielHomorodean director Arxia antreprenorparticipant icircn program

Aplicațiile se aconline pacircnă pe 31 iulie2014 direct pesite-ul programuluiwwwricapro

Ce s-a icircntacircmplat pacircnă acumPrima ediție a RICAP a avut loc icircn peri-

oada ianuarie ndash mai 2014 Icircn acest timp15inovatoriau lucrat alături de o echipă dedi-cată dementori și advisoriextraordinariicircntr-un program de mentorat personalizat

pentru a dezvolta și implementainstru-

mente de comercializare strategii deintrare pe piață strategii de comerciali-zare prezentări pentru clienți Icircn uncțiede nivelul de dezvoltare al companiilorprogramul a acilitat peste 30 de legă-turi strategice cu posibili parteneri șinanțatori din SUA și din Europa inclu-siv membri ai Fortune 1000 din IndustryAdvisory Board-ul Larta partenerul ameri-can al programului Icircn plus două companiiau ost icircn Statele Unite unde au beneciatde aproximativ 15 icircntacirclniri de business cu

posibili parteneri și nanțatoriExperiența a ost di erită pentru cei 15participanți

ldquoAcest program se poate adapta la nevo-ile participanților oriunde v-ați a la icircnspectrul de la pur om de știință pacircnă la omde businessrdquo Alexandru Floareș SAIA șiOnco Predict om de știinta și antreprenorparticipant la RICAP

La icircnceputul lunii iunie am lansat adoua ediție RICAP icircn cadrul căreia am avutevenimente și icircntacirclniri icircn mai multe orașeale țării Am avut ocazia să cunoașteminovatori pasionați și cu viziune care audezvoltat produse incredibile

Icircntacirclnirile cu toți acești oameni șidiscuțiile vibrante pe care le-am avut cumulți dintre ei ne-au validat că ceea ce

acem la RICAP le poate o eri un sprijinreal atacirct lor cacirct și utilizatorilor produselorlor

Un rol cheie icircn prima ediție RICAPl-au avut alături de inovatorii selectați icircn

program mentorii romacircni care le-au ostalături și i-au sprijinit icircn denirea viziuniiși strategiei de comercializare și nu numai

I-am avut alături de noi pe Andrei

Pitiș pro esor antreprenorbusiness angel

și neobosit susținător al ecosistemului ino- vării și al start-up-urilortech din Romacircniape Norina Boru antreprenor și consultantcu o vastă experiență icircn domeniul medicaldin Romacircnia și la nivel internațional Deasemenea icirci menționăm pe Alex MirceaDascălu un antrepenor și consultant cuexperiență internațională și pe SandaFoameteeducation lead la Microsof

Mai multe despre mentori cacirct și despreinovatorii care au participat la prima edițeRICAP puteți citi pewwwricaproblog

Cine suntemRICAP este rezultatul unui par-

teneriat icircntre Centrul Romacircn pentruInovație icircn Dezvoltare Locală (CRIDL)și Institutul Larta localizat icircn LosAngeles SUA Programul este nanțat deRomanian-American Foundation (RAF) șiimplementat cu sprijinul GEA Strategy ampConsulting RICAP construiește pe rețeauainternațională și expertiza acumulatătimp de 20 de ani de Larta Institute prinsusținerea a circa 9700 de inovatori din 17țări

Contactwwwricapro | wwwricaproblog |

FacebookLinkedIn RICAP - Innovationrom lab to market | contactricapro

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

eveniment

RICAP drumul inovației de la laborator către piețe glob

La icircnceputul lunii iunie s-au lansat aplicațiile pentru cea de-a doua ediție a Programului de Asistență icircn Comercializarea Inovăriidin Romacircnia (RICAP)

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 846

8 nr 25Iulie 2014 | wwwtodaysoftmagro

analiză

multe altele Rezultatul a ost spectaculos miniproiectele reali-zate ind cu adevărat interesante Acestea au combinat olosireaGoogle Glasses icircmpreună cu Leap Motion pentru realizarea unui joc sau tastarea unui cod la bancomat prin monitorizarea mișcăriiochilor Probabil o combinație de Startup Weekend și hackaton icircncare sunt puse la dispoziție ultimele gadget-uri disponibile ar ducela crearea unor startup-uri cu adevărat inovative

Today Software Magazine și IT DaysUnul dintre scopurile declarate icircncă de la lansarea revistei a

ost sprijinirea startup-urilor Revista oday Sofware Magazinesprijină majoritatea inițiativelor din această zonă și ajutăm la pro-movarea acestora De asemenea prin evenimentul anual I Daysce va avea loc icircn 3-4 decembrie anul acesta vom aduce pe scenăcele mai importante startup-uri locale

ConcluziiFenomenul startup-urilor și orientarea companiilor ce

activează icircn zona outsourcing spre crearea de produse sunt icircn

continuă creștere Deși nu putem da un exemplu de succes realne așteptăm să putem ace acest lucru icircn curacircnd Mă bucur săputem da un exemplu real compania ondată de doi clujeni și unamerican LiveRail a ost recent achiziționată de către FacebookAceasta demonstrează ără echivoc valoarea ecosistemului localși a educației

S atul pe care icircl dăm celor ce vor să icircși creeze un startup estesă participe la cacirct de multe evenimente locale și internaționalerelațiile personale iind oarte importante la icircnceput de drumEste puțin probabil că ideea ta va schimba lumea macircine dacă nuinteracționezi cu multă lume

Există multe oportunități pe care le remarcăm mai ales icircn

aptul că programatorii vor din ce icircn ce mai mult să icircși creeze pro-dusele proprii iar acceleratoarele locale icircncep să icircși acă simțităprezența Prin produsele dezvoltate icircn outsourcing sau parte dintr-o mare corporație s-a demonstrat aptul că tehnic putem realizaorice din păcate din cauza condențialității majoritatea dintreele nu pot ăcute publice Universitățile devin din ce icircn ce maideschise icircn comunicarea cu specialiștii ce nu sunt parte a lumiiacademice și sperăm să vedem icircn curacircnd mai multe cursuri despreantreprenoriat și de ce nu chiar un accelerator pentru studenți icircncare practica și cercetarea se reunesc

Startup-uri clujeneIcircn continuare vă propun o listă de startup-uri locale ce merită

să e urmărite Mulțumesc lui Mircea Vădan și lui Marius Morneapentru realizarea acesteia Icircn numerele următoare vom reveni cuun in ograc

Squirrly 1 - Este un plugin SEO de wordpress Compania a osticircnințată de către Florin Mureșan și se bucură deja de un numărmare de clienți De asemenea este sprinjinit de către PhillipKandal co- ondator Skobbler

HackaServer2 și C F3653 - un vechi startup clujean condus decătre Marius Coracircci și Marius Chiș Acesta se adreseazăhacker -ilor ce doresc o provocare legală și administratorilor de sisteme cedoresc o icircmbunătățire a securității printr-o testarea reală

HipMenu4

- este o aplicație ce se adresează celor ce vor1 httpwwwsquirrlyco

2 httphackaservercom

3 httpct 365com

4 httpswwwhipmenuro

să comande macircncare la birou sau acasă Marius Mocian unsusținător local a startup-urilor este parte din această echipă

Evolso5 - un startup pornit de către Alin Stănescu și este acumparte din programul de accelerare de la StartupYard

Mira Rehub6 - unul dintre cele mai promițătoare startup-urilocale Au realizat un sistem de recuperare a celor cu problemelocomotorii olosind senzorul Kinect

Mockups7 - implementeză creearea demockup-uri online avacircnd o bază mare de useri online

5 httpwwwevolsocom

6 httpwwwmirarehabcom

7 httpsmoqupscom

Ovidiu Măţanovidiumatantodaysoftmagcom

Editor-in-chiefToday Software Magazine

Ecosistemul IT Clujean din perspectiva startup-urilor

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 946

9wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1046

10 nr 25Iulie 2014 | wwwtodaysoftmagro

RICAP a luat naștere din dorința de

a o eri resurse inovatorilor din Romacircniapentru a ieși pe piețe internaționale cu pro-dusele lor e că este vorba despre energiebio-tehnologii agricultură IC sau oricealt domeniu tehnologic RICAP este ast elprimul program din Romacircnia care sprijinăinovatorii și antreprenorii cu tehnologiiinovatoare să le comercializeze pe piața glo-bală acilitacircnd drumul din laborator cătrepiață Icircn acest e ort programul se bazeazăpe un parteneriat internațional cu unuldintre cele mai importante institute din

SUA care sprijină comercializarea inovării-Larta Institute pe legăturile internaționaleși know-how-ul acestei rețele precum și perețeaua de mentori pe care o consolidăm lanivel local

bdquoCacircnd se vorbește despre problemelebusiness-urilor și startup-urilor eu spun de ecare dată că și banii sunt o parte a pro-blemei dar cea mai importantă problemăeste lipsa de know-how() Experiența pecare am avut-o icircn programul RICAP a osticircn primul racircnd o experiență de coachingDe-asta am și intrat asta am căutat unmediu care să mă icircncurajeze să studiez eudupă programul pe care icircl voiam eu după prioritățile pe care consideram că le avemși să atacăm problemele pas cu pas rdquo DanielHomorodean director Arxia antreprenorparticipant icircn program

Aplicațiile se aconline pacircnă pe 31 iulie2014 direct pesite-ul programuluiwwwricapro

Ce s-a icircntacircmplat pacircnă acumPrima ediție a RICAP a avut loc icircn peri-

oada ianuarie ndash mai 2014 Icircn acest timp15inovatoriau lucrat alături de o echipă dedi-cată dementori și advisoriextraordinariicircntr-un program de mentorat personalizat

pentru a dezvolta și implementainstru-

mente de comercializare strategii deintrare pe piață strategii de comerciali-zare prezentări pentru clienți Icircn uncțiede nivelul de dezvoltare al companiilorprogramul a acilitat peste 30 de legă-turi strategice cu posibili parteneri șinanțatori din SUA și din Europa inclu-siv membri ai Fortune 1000 din IndustryAdvisory Board-ul Larta partenerul ameri-can al programului Icircn plus două companiiau ost icircn Statele Unite unde au beneciatde aproximativ 15 icircntacirclniri de business cu

posibili parteneri și nanțatoriExperiența a ost di erită pentru cei 15participanți

ldquoAcest program se poate adapta la nevo-ile participanților oriunde v-ați a la icircnspectrul de la pur om de știință pacircnă la omde businessrdquo Alexandru Floareș SAIA șiOnco Predict om de știinta și antreprenorparticipant la RICAP

La icircnceputul lunii iunie am lansat adoua ediție RICAP icircn cadrul căreia am avutevenimente și icircntacirclniri icircn mai multe orașeale țării Am avut ocazia să cunoașteminovatori pasionați și cu viziune care audezvoltat produse incredibile

Icircntacirclnirile cu toți acești oameni șidiscuțiile vibrante pe care le-am avut cumulți dintre ei ne-au validat că ceea ce

acem la RICAP le poate o eri un sprijinreal atacirct lor cacirct și utilizatorilor produselorlor

Un rol cheie icircn prima ediție RICAPl-au avut alături de inovatorii selectați icircn

program mentorii romacircni care le-au ostalături și i-au sprijinit icircn denirea viziuniiși strategiei de comercializare și nu numai

I-am avut alături de noi pe Andrei

Pitiș pro esor antreprenorbusiness angel

și neobosit susținător al ecosistemului ino- vării și al start-up-urilortech din Romacircniape Norina Boru antreprenor și consultantcu o vastă experiență icircn domeniul medicaldin Romacircnia și la nivel internațional Deasemenea icirci menționăm pe Alex MirceaDascălu un antrepenor și consultant cuexperiență internațională și pe SandaFoameteeducation lead la Microsof

Mai multe despre mentori cacirct și despreinovatorii care au participat la prima edițeRICAP puteți citi pewwwricaproblog

Cine suntemRICAP este rezultatul unui par-

teneriat icircntre Centrul Romacircn pentruInovație icircn Dezvoltare Locală (CRIDL)și Institutul Larta localizat icircn LosAngeles SUA Programul este nanțat deRomanian-American Foundation (RAF) șiimplementat cu sprijinul GEA Strategy ampConsulting RICAP construiește pe rețeauainternațională și expertiza acumulatătimp de 20 de ani de Larta Institute prinsusținerea a circa 9700 de inovatori din 17țări

Contactwwwricapro | wwwricaproblog |

FacebookLinkedIn RICAP - Innovationrom lab to market | contactricapro

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

eveniment

RICAP drumul inovației de la laborator către piețe glob

La icircnceputul lunii iunie s-au lansat aplicațiile pentru cea de-a doua ediție a Programului de Asistență icircn Comercializarea Inovăriidin Romacircnia (RICAP)

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 946

9wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1046

10 nr 25Iulie 2014 | wwwtodaysoftmagro

RICAP a luat naștere din dorința de

a o eri resurse inovatorilor din Romacircniapentru a ieși pe piețe internaționale cu pro-dusele lor e că este vorba despre energiebio-tehnologii agricultură IC sau oricealt domeniu tehnologic RICAP este ast elprimul program din Romacircnia care sprijinăinovatorii și antreprenorii cu tehnologiiinovatoare să le comercializeze pe piața glo-bală acilitacircnd drumul din laborator cătrepiață Icircn acest e ort programul se bazeazăpe un parteneriat internațional cu unuldintre cele mai importante institute din

SUA care sprijină comercializarea inovării-Larta Institute pe legăturile internaționaleși know-how-ul acestei rețele precum și perețeaua de mentori pe care o consolidăm lanivel local

bdquoCacircnd se vorbește despre problemelebusiness-urilor și startup-urilor eu spun de ecare dată că și banii sunt o parte a pro-blemei dar cea mai importantă problemăeste lipsa de know-how() Experiența pecare am avut-o icircn programul RICAP a osticircn primul racircnd o experiență de coachingDe-asta am și intrat asta am căutat unmediu care să mă icircncurajeze să studiez eudupă programul pe care icircl voiam eu după prioritățile pe care consideram că le avemși să atacăm problemele pas cu pas rdquo DanielHomorodean director Arxia antreprenorparticipant icircn program

Aplicațiile se aconline pacircnă pe 31 iulie2014 direct pesite-ul programuluiwwwricapro

Ce s-a icircntacircmplat pacircnă acumPrima ediție a RICAP a avut loc icircn peri-

oada ianuarie ndash mai 2014 Icircn acest timp15inovatoriau lucrat alături de o echipă dedi-cată dementori și advisoriextraordinariicircntr-un program de mentorat personalizat

pentru a dezvolta și implementainstru-

mente de comercializare strategii deintrare pe piață strategii de comerciali-zare prezentări pentru clienți Icircn uncțiede nivelul de dezvoltare al companiilorprogramul a acilitat peste 30 de legă-turi strategice cu posibili parteneri șinanțatori din SUA și din Europa inclu-siv membri ai Fortune 1000 din IndustryAdvisory Board-ul Larta partenerul ameri-can al programului Icircn plus două companiiau ost icircn Statele Unite unde au beneciatde aproximativ 15 icircntacirclniri de business cu

posibili parteneri și nanțatoriExperiența a ost di erită pentru cei 15participanți

ldquoAcest program se poate adapta la nevo-ile participanților oriunde v-ați a la icircnspectrul de la pur om de știință pacircnă la omde businessrdquo Alexandru Floareș SAIA șiOnco Predict om de știinta și antreprenorparticipant la RICAP

La icircnceputul lunii iunie am lansat adoua ediție RICAP icircn cadrul căreia am avutevenimente și icircntacirclniri icircn mai multe orașeale țării Am avut ocazia să cunoașteminovatori pasionați și cu viziune care audezvoltat produse incredibile

Icircntacirclnirile cu toți acești oameni șidiscuțiile vibrante pe care le-am avut cumulți dintre ei ne-au validat că ceea ce

acem la RICAP le poate o eri un sprijinreal atacirct lor cacirct și utilizatorilor produselorlor

Un rol cheie icircn prima ediție RICAPl-au avut alături de inovatorii selectați icircn

program mentorii romacircni care le-au ostalături și i-au sprijinit icircn denirea viziuniiși strategiei de comercializare și nu numai

I-am avut alături de noi pe Andrei

Pitiș pro esor antreprenorbusiness angel

și neobosit susținător al ecosistemului ino- vării și al start-up-urilortech din Romacircniape Norina Boru antreprenor și consultantcu o vastă experiență icircn domeniul medicaldin Romacircnia și la nivel internațional Deasemenea icirci menționăm pe Alex MirceaDascălu un antrepenor și consultant cuexperiență internațională și pe SandaFoameteeducation lead la Microsof

Mai multe despre mentori cacirct și despreinovatorii care au participat la prima edițeRICAP puteți citi pewwwricaproblog

Cine suntemRICAP este rezultatul unui par-

teneriat icircntre Centrul Romacircn pentruInovație icircn Dezvoltare Locală (CRIDL)și Institutul Larta localizat icircn LosAngeles SUA Programul este nanțat deRomanian-American Foundation (RAF) șiimplementat cu sprijinul GEA Strategy ampConsulting RICAP construiește pe rețeauainternațională și expertiza acumulatătimp de 20 de ani de Larta Institute prinsusținerea a circa 9700 de inovatori din 17țări

Contactwwwricapro | wwwricaproblog |

FacebookLinkedIn RICAP - Innovationrom lab to market | contactricapro

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

eveniment

RICAP drumul inovației de la laborator către piețe glob

La icircnceputul lunii iunie s-au lansat aplicațiile pentru cea de-a doua ediție a Programului de Asistență icircn Comercializarea Inovăriidin Romacircnia (RICAP)

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1046

10 nr 25Iulie 2014 | wwwtodaysoftmagro

RICAP a luat naștere din dorința de

a o eri resurse inovatorilor din Romacircniapentru a ieși pe piețe internaționale cu pro-dusele lor e că este vorba despre energiebio-tehnologii agricultură IC sau oricealt domeniu tehnologic RICAP este ast elprimul program din Romacircnia care sprijinăinovatorii și antreprenorii cu tehnologiiinovatoare să le comercializeze pe piața glo-bală acilitacircnd drumul din laborator cătrepiață Icircn acest e ort programul se bazeazăpe un parteneriat internațional cu unuldintre cele mai importante institute din

SUA care sprijină comercializarea inovării-Larta Institute pe legăturile internaționaleși know-how-ul acestei rețele precum și perețeaua de mentori pe care o consolidăm lanivel local

bdquoCacircnd se vorbește despre problemelebusiness-urilor și startup-urilor eu spun de ecare dată că și banii sunt o parte a pro-blemei dar cea mai importantă problemăeste lipsa de know-how() Experiența pecare am avut-o icircn programul RICAP a osticircn primul racircnd o experiență de coachingDe-asta am și intrat asta am căutat unmediu care să mă icircncurajeze să studiez eudupă programul pe care icircl voiam eu după prioritățile pe care consideram că le avemși să atacăm problemele pas cu pas rdquo DanielHomorodean director Arxia antreprenorparticipant icircn program

Aplicațiile se aconline pacircnă pe 31 iulie2014 direct pesite-ul programuluiwwwricapro

Ce s-a icircntacircmplat pacircnă acumPrima ediție a RICAP a avut loc icircn peri-

oada ianuarie ndash mai 2014 Icircn acest timp15inovatoriau lucrat alături de o echipă dedi-cată dementori și advisoriextraordinariicircntr-un program de mentorat personalizat

pentru a dezvolta și implementainstru-

mente de comercializare strategii deintrare pe piață strategii de comerciali-zare prezentări pentru clienți Icircn uncțiede nivelul de dezvoltare al companiilorprogramul a acilitat peste 30 de legă-turi strategice cu posibili parteneri șinanțatori din SUA și din Europa inclu-siv membri ai Fortune 1000 din IndustryAdvisory Board-ul Larta partenerul ameri-can al programului Icircn plus două companiiau ost icircn Statele Unite unde au beneciatde aproximativ 15 icircntacirclniri de business cu

posibili parteneri și nanțatoriExperiența a ost di erită pentru cei 15participanți

ldquoAcest program se poate adapta la nevo-ile participanților oriunde v-ați a la icircnspectrul de la pur om de știință pacircnă la omde businessrdquo Alexandru Floareș SAIA șiOnco Predict om de știinta și antreprenorparticipant la RICAP

La icircnceputul lunii iunie am lansat adoua ediție RICAP icircn cadrul căreia am avutevenimente și icircntacirclniri icircn mai multe orașeale țării Am avut ocazia să cunoașteminovatori pasionați și cu viziune care audezvoltat produse incredibile

Icircntacirclnirile cu toți acești oameni șidiscuțiile vibrante pe care le-am avut cumulți dintre ei ne-au validat că ceea ce

acem la RICAP le poate o eri un sprijinreal atacirct lor cacirct și utilizatorilor produselorlor

Un rol cheie icircn prima ediție RICAPl-au avut alături de inovatorii selectați icircn

program mentorii romacircni care le-au ostalături și i-au sprijinit icircn denirea viziuniiși strategiei de comercializare și nu numai

I-am avut alături de noi pe Andrei

Pitiș pro esor antreprenorbusiness angel

și neobosit susținător al ecosistemului ino- vării și al start-up-urilortech din Romacircniape Norina Boru antreprenor și consultantcu o vastă experiență icircn domeniul medicaldin Romacircnia și la nivel internațional Deasemenea icirci menționăm pe Alex MirceaDascălu un antrepenor și consultant cuexperiență internațională și pe SandaFoameteeducation lead la Microsof

Mai multe despre mentori cacirct și despreinovatorii care au participat la prima edițeRICAP puteți citi pewwwricaproblog

Cine suntemRICAP este rezultatul unui par-

teneriat icircntre Centrul Romacircn pentruInovație icircn Dezvoltare Locală (CRIDL)și Institutul Larta localizat icircn LosAngeles SUA Programul este nanțat deRomanian-American Foundation (RAF) șiimplementat cu sprijinul GEA Strategy ampConsulting RICAP construiește pe rețeauainternațională și expertiza acumulatătimp de 20 de ani de Larta Institute prinsusținerea a circa 9700 de inovatori din 17țări

Contactwwwricapro | wwwricaproblog |

FacebookLinkedIn RICAP - Innovationrom lab to market | contactricapro

Silvia Ursusilviaursucridlorg

Communications CoordinatorRICAP

eveniment

RICAP drumul inovației de la laborator către piețe glob

La icircnceputul lunii iunie s-au lansat aplicațiile pentru cea de-a doua ediție a Programului de Asistență icircn Comercializarea Inovăriidin Romacircnia (RICAP)

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1146

11wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE startups

ZenQ ndash ldquoModul de a spune mulțumesc și de a-ți aprecprietenii și colegii extraordinarirdquo

Noi credem că ecare om icircn parte este extraordinar și ar trebui să audă acest lucru mai des De aceea construim ZenQ modulde a spune mulțumesc și de a-ți aprecia prietenii și colegii extraordinari Pe mobilul tău Icircn secunde

Icircnceput la Startup Weekend Cluj icircn martie drept un MVP

numai pentru iOS proiectul a crescut rapid cu aplicațiile iOS șiAndroid live icircn magazine din 7 mai

Cum uncționează ZenQ Imaginați-vă cum ar să răs oițiprintre prietenii voștri de pe acebook și să icirci aprobi exact cum

aci pe Linkedin dar de data asta pentru calitățile lor (amuzantdeștept creativ) Cineva ți-a ăcut ziua mai rumoasă și vrei să acicunoscut acest lucru Poți găsi acea persoană icircn aplicație și icirci poțilăsa o icircnsemnare prin care icirci arăți cacirct de nemaipomenită este La

nal ecare dintre noi dobacircndește un prol icircn care icircți poți desco-peri punctele orte prin ochii prietenilor tăi Deci icircn esență ZenQicircnseamnă răspacircndirea vibrațiilor pozitive distracție bucurie

Din spatele cortinei ZenQ este acționat de unbackend Djangocare utilizează in ormațiile delogin pe Facebook acumulate declienți pentru a obține prietenii utilizatorului de pe Facebook șia-i o eri din nou clienților la cerere Lista trăsăturilor este de ase-menea urnizată de serviciulbackend ăcacircnd-o ușor de actualizatpe baza eed-back-ului de la utilizatori Aceste in ormații sunt apoi

olosite pentru a crea prolele utilizatorilor care acum arată o listăde trăsături cu care a ost icircnvestit un utilizator ordonate dupănumărul de susținători

bdquoFațardquo ZenQ o constituie clienții mobili iOS și AndroidInter ața utilizează o paradigmă de navigare oarte simplă carenecesită maxim două atingeri pentru a ajunge oricacircnd la oriceecran otuși atenția se concentrează icircn mare parte pe ecranulbdquoZenQi yrdquo care este primul ecran pe care icircl vede utilizatorul atunci

cacircnd deschide aplicația Mai mult utilizatorul se poate icircntoarceușor la el după ce a deschis alte ecrane ăcacircnd din acesta punc-tul central al aplicației Utilizatorii pot de asemenea să susținăanumiți prieteni căutacircndu-i și accesacircndu-le prolul unde potlăsa și mesaje legate de trăsătura pentru care doresc să subscrie

Procesul de dezvoltare al ZenQ este distractiv iar eedback-ul

de la cacircteva sute de utilizatori beta a ost pozitiv pacircnă acum Acumcacircteva zile am lansat noile versiuni pentru iOS și Android De abiaașteptăm să primim mai mult eedback și să aăm ce i-ar ace peutilizatori mai ericiți și mai implicați icircn aplicație

Icircn primul racircnd noi credem că ZenQ poate icircntări optimismulși interacțiunile pozitive din diverse comunități organizațiiși companii Se icircntacircmplă adesea ca icircn aceste tipuri de mediusă ne concentrăm atacirct de mult pe icircndeplinirea sarcinilor icircncacirct

relațiile să se olească iar acest lucru pe termen lung a ecteazăcu adevărat orța grupului Icircntr-un al doilea scenariu noi credemcă interacțiunea ușoară și distracția magică o erită de ZenQ le-ar

ace plăcere utilizatorilor și că se vor implica icircn acest joc social desusținere a prietenilor lor

Vă rugăm să vizitațiwwwzenqco pentru a obține aplicația pesmartphone-ul vostru și o eriți-ne eed -back la adresacontactzenqco Vă mulțumim mult

Mihai Costeamihaicosteagmailcom

iOS Developer Zenq

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1246

12 nr 25Iulie 2014 | wwwtodaysoftmagro

Este de asemenea cunoscut aptul cămajoritatea companiilor de I din orașulnostru sunt icircn continuă căutare de noitalente După datele existente vehiculateconrmate și de către membrii noștri vor-bim de sute de locuri de muncă vacanteși pentru care este di icil să se găseascăcandidații potriviți Este de asemeneacunoscut aptul că salariile din industria Isunt ca medie mult peste nivelul naționalși că icircntr-o comparație a puterii de cum-

părare au devenit competitive și la nivelglobal Ca o paranteză remarc un enomeninteresant de migrație a orței de muncădar care este icircn același timp paradoxal un

enomen pe care un CEO al uneia din com-paniile din Cluster l-a denumit ldquoreversedoutsourcingrdquo Practic din ce icircn ce maimulte companii icircncearcă să suplineascăpenuria locală de talente de pe piața munciiprin importul ei din alte țări și surprinză-tor nu dintre cele cu standard mai scăzutde viață decacirct cel din Romacircnia

Dar cacirct de cunoscute sunt toate acesteade către cei pe care am dori să icirci vedem căaleg o carieră icircn I Le sunt și lor cunos-cute aceste realități Sau mai degrabă

trăim cu impresia că realitățile care ne suntnouă apropiate (ca nivel de cunoaștere sauca interes) sunt la el de bine cunoscute șide alții După toate aparențele creionatede situația concretă a nealinierii o ertei cuo cerință certă a pieței muncii realitățileacestea nu sunt cunoscute sau icircn cel maibun caz sunt puțin cunoscute Icircn aceastăsituație se naște icircntrebarea irească de ceanume se icircntacircmplă acest lucru și care ar mecanismele prin care putem interveni

pentru ca talentele de care avem nevoie săe și disponibile Sunt mai multe răspun-suri atacirct icircn ceea ce privește cauzele cacirct șipentru soluții dar cum spațiul e limitatam să mă re er acum doar la elul icircn carese organizează practica studențească icircnRomacircnia care cel puțin teoretic ar trebuisă e un instrument puternic de inserție pepiața muncii

Planul de icircnvățămacircnt prevede e ec-tuarea obligatorie contra unui număr decredite a unui stagiu de practică de spe-cialitate care de regulă este de 90 de oreAcestea pot distribuite de-a lungul a douăsemestre apt care se și icircntacircmplă icircn reali-tate Fragmentarea a unui număr extrem

de puțin de ore este cel puțin din punctulmeu de vedere o greșeală Practic studen-tul nu are răgazul necesar pentru a icircnțelegeși a trage concluziile re eritoare la ceea cese icircntacircmplă icircn compania organizația icircncare a ajuns dacă acea instituție poate saunu să e opțiune reală de carieră Mai multdecacirct atacirct stagiul de practică este denitprin lege ca o disciplină de sine stătătoare

oate acestea mă icircndreaptă spre o conclu-zie rească care spune multe despre elul icircn

care este de apt perceput acest instrumentCa să iu mai explicit am să aduc exem-ple din alte state europene Icircn Olanda depildă programele de masterat prevăd celpuțin un semestru dacă nu chiar un anicircntreg de practică studențească icircn dome-niul de pregătire al persoanei respective IcircnGermania de exemplu sunt implementateprograme speciale duale de tip vocaționalicircn care sunt icircmbinate stagiile de practică cucele teoretice asiguracircndu-se ast el un corpconsistent de oameni bine pregătiți pentruceea ce economia poate o eri Exemplelepot continua desigur și toate relevă opreocupare pentru realizarea și susținereaunui mecanism cacirct mai ecient de inserție

Una dintre preocupările constante ale Cluj I Cluster este resursa umană din industrie Este de notorietate aptul că I -ulclujean icircncă icircn mod substanțial bazat pe servicii deoutsourcing are nevoie constantă de oameni cacirct mai bine pregătiți și cacirctmai numeroși

business

Despre relevanța practicii studențești

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1346

13wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

pe piața munciiCadrul icircn care evoluăm icircn Romacircnia

nu este după cum se poate constata unuloarte avorabil dar acest lucru nu ne

descurajează Ca parte a e orturilor de aaduce icircn atenția tinerilor dar nu numai aoportunităților de carieră și de viață pe careindustria noastră le o eră Cluj I Clustera demarat un program prin care icircncercămsă realizăm acel nivel de cunoaștere necesarpentru o decizie in ormată asupra pregătiriiși dezvoltării pro esionale mai ales icircn cazultinerilor care urmează studii superioare sauintenționează să se icircnscrie la o unviersitateProgramul este mai amplu cuprinde maimulte etape și niveluri de acțiune unele icircn

ază mai avansată de pregătire altele icircncă

icircn ază de idee Nu este nici locul și proba-bil nici momentul pentru a intra icircn detaliiicircnsă un prim pas a ost deja ăcut Cluj ICluster este partener icircntr-un proiect cu

inanțare nerambursabilă europeană cuUniversitatea Babeș-Bolyai prin care vom

acilita accesul la stagii de practică organi-zate cu precădere la companii și organizațiimembre ale Cluj I Cluster pentru unnumăr de 400 de studenți provenind de laFacultățile de Matematică și In ormaticăși Facultățile de Științe Economice și

Gestiunea A acerilor (FSEGA) Proiectuleste intitulat bdquoCreșterea oportunităţilorde ocupabilitate prin practică de suc-cess (PRAC -I ) și este co inanţat dinFondul Social European prin ProgramulOperational Sectorial DezvoltareaResurselor Umane 2007 ndash 2013

Dincolo de declarație de intenție și deobiectivele seci ale unui proiect aceastăinițiativă dorim să e una prin care reușimsă acem mai bine icircnțeleasă industria de I

deopotrivă oportunitățile pe care le o erădar și rigorile cerute de angajatorii din acestdomeniu Acesta este și motivul pentrucare designul proiectului a prevăzut dinstart includerea studenților provenind dela FSEGA nu doar pe cei de la Matematicăși In ormatică Cu alte cuvinte am dorit sămergem dincolo de prolul clasic al angaja-tului care provine de la o acultate de prolunde industria este mai bine cunoscută șisă extindem ast el cercul de cunoaștere șiicircn alte domenii de pregătire

Proiectul urmărește icircn cele din urmăcreșterea atacirct a relevanței studiilor șicompetențelor dobacircndite icircn timpul stadi-ilor de icircnvățare prin apro undarea acestoraicircn cadrul unor stagii de practică apli-

cată cacirct și o inserție cacirct mai bună a celorincluși icircn proiect pe piața muncii Creștereaoportunităților de angajare va asiguratăcomplementar și icircn prealabil prin acțiunide in ormare si consiliere pro esională pen-tru un număr de 450 de studenți Studențiicare vor participa la activitățile proiectului vor proveni de la specializările matema-tică in ormatică in ormatică economicăstatistică marketing a aceri internaţionaleeconomie generală și contabilitate și vor selectați icircn baza unui proces transparent

pentru participare icircn proiectProiectul are o durată de implementarede 18 luni și a demarat la data de 5 mai2014 iar activitatea e ectivă cu studenții vaicircncepe odată cu noul an universitar adicădin octombrie 2014 mai icircntacirci cu selecțialor apoi parcurgerea etapei de consilierepro esională și icircn cele din urmă stagiilede practică Speranța este că vom reușisă instituim un nou model de derularea acestor stagii de practică și că studenții

participanți vor reuși să valorice o șansăreală de carieră Așa cum arată industria deI azi icircn Cluj depinde doar de ei

Andrei Kelemenandreikelemenclujitro

Director executiv IT Cluster

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1446

14 nr 25Iulie 2014 | wwwtodaysoftmagro

startups

La nal de iunie Deutsche Welle publica o analiză economică arătacircnd cum Germania e icircn continuare o ţară cu bdquodouă economiirdquodin cauza di erenţelor uriașe de venit dintre Germania de Vest și Germania de Est (httpwwwdwdemapping-differences-in-two-german-economiesa-17734799) oate acestea s-au icircntacircmplat după e orturi uriașe ăcute de guvernul ederal precum

trans erul a aproape trei trilioane de euro dinspre Vest spre Est

Banii s-au dus cel mai mult icircn in ra-structură și nu icircn a porni bdquomotoruldezvoltăriirdquo ndash iniţiativele antreprenori-ale spune pro esorul Gerald Braun de laUniversity o Rostock citat icircn articol Cualte cuvinte antreprenoriatul ace di e-

renţahellip iar Fundaţia Danis pentruDezvoltare Managerială crede și promo- vează ideea că o comunitate puternică sebazează pe a aceri protabile și stabile

Cel mai recent proiect al FundaţieiDanis de educaţie antreprenorială estendash bdquoDrive Your Community or BetterrdquoProiectul sprijină tineri antreprenoriclujeni și icircn același timp mobilizeazăcomunitatea pentru recunoașterea rolu-lui important pe care antreprenoriatul desucces icircl joacă icircn dezvoltarea economică aunei societăţi Ast el proiectul este nanţatexclusiv de donatori individuali ndash peste 100de oameni pacircnă acum

Educaţie antreprenorială dincolo declasicul plan de afaceri

Odată trecuţi de etapa esenţială a pla-nului de a aceri antreprenorii trebuie săicircnveţe să icircși construiască businessul pascu pas atrăgacircnd icircn bdquovisulrdquo lor investitori

inanţatori parteneri și clienţi bdquoDriveYour Community or Betterrdquo o eră tine-rilor antreprenori cunoștinţe de bază de

educaţie inanciară și de economie com-portamentală cunoștinţe care contribuie ladezvoltarea și stabilizarea nanciară a r-melor aate la icircnceput de drum Proiectuls-a născut din nevoile pe care le au

tinerii antreprenori și care auost identicate de undaţie icircn

ultimii ani de activitate

bdquoPrin proiectele noastre pacircnă acum am ajutat peste 200

de antreprenori aaţi la icircnceputde drum să icircși acă planuri dea aceri temeinice să icircși deschidăa acerile visate sau să participela schimburi de experienţă cuantreprenori de succes Dininteracţiunile cu acești antre- prenori am văzut că cei maimulţi dintre ei au carențe icircncunoștințe și competențe icircndomeniul educației inanci-are mai precis icircn realizarea plani icări lor inanciare icircnicircnțelegerea principiilor de bazăde contabilitate și icircn obținereași gestionarea inanțărilorrdquo(Cordelia Bădescu DirectorExecutiv Fundaţia Danis)

De asemenea un studiuCapital din 2013 arată că unIMM din trei moare icircn primulan de activitate (httpwwwcapitalroun-imm-din-trei-moare-in-primul-an-de-

la-in iintare-183199html)Aproape 10 din irmele dinRomacircnia se icircnchid icircn primul ande activitate și aproximativ 30dintre cele care rămacircn icircnințate

Drive Your Community for Better alături de tineriantreprenori clujeni

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1546

15wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

sunt inactive Peste 75 dintre antrepre-nori au renunțat la business pentru că nuau avut su iciente resurse ceea ce indicăslabe cunoștințe și competențe de a atragenanțări și a le gestiona icircn mod ecient

Proiectul bdquoDrive Your Community orBetterrdquo răspunde acestor nevoi o erindantreprenorilor care vor i acceptaţi icircnproiect ateliere de educaţie nanciară orga-nizate pe următoarele direcţii obținereade nanțări (linii de nanțare atragere deinvestitori) și plani icarea și gestionarearesurselor inanciare (realizarea planuluinanciar calcularea pragului de rentabili-tate bugetare olosireacashow-ului) Deasemenea antreprenorii vor participa și laun work-shop de economie comportamen-tală cu ocus pe elemente de iraţionalitate icircnluarea deciziilor Acesta este organizat pro-

bono de Danis Consulting De asemeneao parte dintre antreprenorii participanţi laproiect vor primi și resurse nanciare pen-tru mici investiţii de icircnceput de a acereAtelierele din cadrul proiectului vor avealoc icircn a doua parte a lunii septembrie Peste vară are loc selecţia celor mai motivaţi 15tineri antreprenori

Icircn proiect vor i acceptaţi antrepre-nori care acum sunt icircn aza de planicaresau deschidere a unui business sau auo experienţă icircn administrarea unei a a-

ceri mai mică de trei ani Selecţia seace pe baza completării unei aplicaţiionline și a unui interviu Aplicaţia poate

i completată la următorullink httpsdocsgooglecoma undatiadanisro

ormsd1lyG9GmdKjNiD m4DoZ5z_i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E view orm

Cele mai importante criterii de selecţiesunt icircnclinaţia antreprenorială motivaţiapentru participarea la proiect și planul con-cret de activităţi pentru dezvoltarea a aceriipentru următorul an Icircnscrierile se ac pacircnăla nalul lunii iulie Detalii laoffice un-datiadanisro

Proiect susţinut exclusiv de donatoriindividuali oameni care cred icircn antre-prenoriat

bdquoDr ive Your Community or Bet terrdquoeste un proiect nanţat icircn mod exclusiv dedonatori individuali adică de oameni carecred icircn valoarea și importanţa antrepreno-riatului Pacircnă acum peste 100 de oameniau ales să susţină proiectul FundaţieiDanis prin două iniţiative de mobilizarede resurse

Una dintre iniţiative este un eveni-ment de stracircngere de onduri organizat deFundaţia Danis icircn parteneriat cu oyotaCluj-Napoca și okyo Restaurant Japanesela inalul lunii mai Icircn cadrul acestuieveniment detest drive asortat cu spe-cialităţi culinare japoneze manageri șiantreprenori cu experienţă din Cluj au alessă susţină nanciar proiectul bdquoDrive YourCommunity or Betterrdquo

A doua iniţiativă este icircnscrierea pro-iectului la Swimathon un eveniment de

stracircngere de onduri organizat de FundaţiaComunitară Cluj La Swimathon pro-iectul e susţinut de șapte icircnotători carela racircndul lor sunt sprijiniţi de prieteni

amilie și cunoștinţe care contribuienanciar la dezvoltarea antreprenoriatuluiclujean Campania de stracircngere de onduria Swimathon-ului se icircncheie la nalul verii

Ast el pacircnă atunci sunt șanse mari canumărul celor care susţin proiectul bdquoDriveYour Community or Betterrdquo să crească șimai mult

Paula Beudeanpaulabeudeanfundatiadanisro

Coordonator Proiecte Fundația Danis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1646

16 nr 25Iulie 2014 | wwwtodaysoftmagro

ransylvania Java User GroupComunitate dedicată tehnologiilor JavaWebsitewwwtransylvania-jugorgData icircninţării 15052008 Nr Membri 582 Nr Evenimente 44

Comunitatea SM

Comunitate construită icircn jurul revisteioday Sofware MagazineWebsite www acebookcomtodaysofmagData icircninţării 06022012 Nr Membri 1606Nr Evenimente 20

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite wwwmeetupcomBusiness-Analysts-ClujData icircninţării 10072013 Nr Membri 77 Nr Evenimente 6

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite wwwmeetupcomCluj-Mobile-Developers

Data icircninţării 05082011 Nr Membri 196 Nr Evenimente 13Te Cluj Napoca Agile Sofware Meetup GroupComunitate dedicată metodelor Agile de dezvoltare sofwareWebsitewwwagileworksroData icircninţării 04102010 Nr Membri 433 Nr Evenimente 76

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semanticeWebsitewwwmeetupcomCluj-Semantic-WEBData icircninţării 08052010 Nr Membri 184 Nr Evenimente 27

Romanian Association or Better SofwareComunitate dedicată oamenilor cu experiență din I indi erent detehnologie sau specializareWebsitewwwrabsroData icircninţării 10022011 Nr Membri 244 Nr Evenimente 14

abăra de testareUn proiect care icircși dorește să stracircngă cacirct mai mulți oameni carelucrează ca și testeriWebsite tabaradetestareroData icircninţării 15012012 Nr Membri 323 Nr Evenimente 31

Luna iulie vine cu mai puține evenimente Vă propunem Cluj Business Days și bineicircnțeles vă așteptăm icircn 22 iulie la lansareanumăului 25 SM

Calendar Iulie 9-10 (Cluj)Cluj Business Days - recomandarea SMbusinessdaysroEvenimenteCluj-2014

Iulie 19 (Iași)Iasi Inaugural MUG mongostatmeetupcomIasi-MongoDB-User-Groupevents191672362

Iulie 14 (Cluj)Personalized in ormation discovery meetupcomCluj-Semantic-WEBevents186829692

Iulie 19-20 (București)Startceleratebuchareststartceleratecom

Iulie 22 (Cluj)Lansarea numărului 25 a oday Sofware Magazine (Cluj)wwwtodaysofmagro

Iulie 23 (Cluj)Requirements Engineering - Factor o success ul projectsmeetupcomBusiness-Analysts-Clujevents192771622

Iunie 28 (Cluj)Mobile Monday Cluj 10meetupcomCluj-Mobile-Developersevents177046842

Comunităţi IT

comunități

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1746

17wwwtodaysoftmagro | nr 25Iulie 2014

programare

Părerea care reiesea din articolul

menționat și pe care o icircmpărtășesc este aceeacă businessul de volum speci ic modeluluioutsourcing a devenit dăunator icircnseși piețeipe care o adresează

Icircn racircndurile următoare vom icircncerca săpropunem moduri care ar putea schimba ațasofware -ului romacircnesc

Ca și icircn cazul unui chirurg totul se reducela modul de execuție Icircmbinarea cunoștințelorcu tehnica de lucru trebuie să rezulte icircnper ecțiune

Deci avem două părti ale ecuației pregăti-rea personalului și calitatea execuției

Icircn domeniul pregătirii personaluluilucrurile stau mult mai bine decacirct acum 10ani Internetul abundă de in ormații rmelede atestare s-au maturizat și acum poți obține validarea cunoștințelor icircn practic orice aspectal activitățilorsofware (de la management la ramework-uri și limbaje de programare spe-cice pacircnă la aptitudini de testare validateIS QB) Singurul obstacol este modul deaplicare icircn cadrul companiilor

Icircnvățarea este parte din munca de labirou și orice a acere care icircși propune să

e pe piață și peste 30 de ani va icircnțelege cădacă n-a ăcut-o deja trebuie să icircși regacircn-dească strategia ast el icircncacirct să icircși permită oinvestiție zilnică icircntraining pe angajat cu tot

ce presupune aceasta (eg schimbarea ormu-

lelor de o ertare a proiectelor achiziționareaprogramelor detraining etc)Icircn ceea ce priveșteasigurarea calității

produselor so tware consider că practicileautohtone sunt decitare Folosirea departa-mentelor de testare icircn validarea calității unuiprodus sofware este greșit icircnțeleasă și aplicatăContrar convingerilor (care par generalizate)ale organizatiilor care s-au grăbit să-și pro-moveze pesite-urile proprii spre exemplualinierea la standardele ISO producția desofware are oarte puține lucruri icircn comuncu producția de lapte sau ouă

Alte mijloace sunt icircn schimb mult maipotrivite și voi scrie despre acestea icircn conti-nuare Ele alcătuiesc corpul acestui articol șile consider absolut necesare cacircnd ne re erimla calitate

Versioning toolVersionarea codului sursă icircn I -ul romacirc-

nesc a devenit de ceva vreme status quoicircn mare parte datorită dinamicii echipelorde dezvoltare dar și cerințelor cliențilorSingurul s at ar să nu rămacircneți icircn urmă cu

tendințele nu olosiți CVS cacircnd la modă esteGI

Inspirat de Ovidiu Șuța (ISDC) prin articolul său ldquoCe este icircn neregulă cu IT-ul dinRomacircnia rdquo din ediția 23 a SM simt nevoia de a ace un exercițiu de imaginație (sau nu)prin a picta o posibila direcție a viitorului I -ului romacircnesc

IT-ul romacircnesc quo vadis

Ovidiu Simionicaovidiusimionicafortechro

Team Lead Fortech

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1846

18 nr 25Iulie 2014 | wwwtodaysoftmagro

Project documentation amp issue trackingFolosițitool -uri integrate și ldquo ull- eaturerdquo deoarece sunt atacirct

de iefine și aduc un aport enorm calității Clientul va avea prinintermediul lor un acces și control de top asupra stării proiectuluiși icirci va spori icircncrederea icircn parteneriat

Continuous integrationUn ldquomustrdquo indi erent de limbajul de programare Nu pot con-

cepe un proiect ără a ști starea codului icircn orice moment Unelte cași Jenkins sunt indispensabile La orice modicare adusă codului veți icircnștiințați dacă testele automate s-au executat cu succes șidacă metricile de calitate sunt icircn limitele propuse Combinat și cuscripturi de instalare puteți congura un sistemlive unde clien-tul poate accesa oricacircnd cea mai nouă versiune a produsului Amlucrat icircn trecut icircn Germania la un client de renume (ce activa icircnindustria de creare soluții sofware) care avea ca și unică moda-litate de a produce o versiune a produsului compilarea icircn IDE șiarhivarea manuală Nici urma de Gradle Maven Ant sau măcarun bash script Inutil să spun că o ast el de abordare nu poate

acceptabilă cacircnd discutăm despre calitate (chiar și cacircnd nu discu-tăm despre calitate)

Testare automatăNu există motiv să nu olosim testare automată Și mai mult

trebuie să ie de toate ormeleunit testing integration testing regression automation (eg selenium) Am auzit toate motivelepentru a nu le ace icircnsă nici unul icircntemeiat Recent mi s-a spus cănu are rost să testăm javascript-ul pentru că oricum e acoperit detastarea manuală Am insistat să e testat automat Argumenteleapoi s-au schimbat e oarte dicil de testat Dar ldquodicilrdquo nu e unargument

Metrici de calitateSunt oarte multe la alegere unele mai simple analizează

convențiile de stil altele merg pacircnă la a măsura complexitatea unuibloc de cod Construirea unui pachet de bază și aderarea la el aceparte din orice setup de proiect Cele mai relevante sunt

bull Code coverage ca regulă generală pacircnă icircn 74 e prea puținpeste 85 este prea mult și icircn special acordați atențe lacondi-tional coverage

bull Code complexity versus coverage matrix atacați (prin

scrierea deunit teste re actoring etc) cu prioritate codul careare complexitate ridicată șicoveragescăzut

bull Dependency analysis nu permiteți dependențe circulare icircncod atacirct la nivel de pachete cacirct și la nivel de șiere

Code reviewAderați la principiile solide1 și tindeți către simplitate atunci

cacircnd inspectați codul

Cum ne asigurăm că IT-ul din Romacircnia nu o va lua pe drumIndiei

Dacircnd un exemplu icircn Cluj care să inspire restul comunitățiiE nevoie de un cadru ormal care să o ere greutate și care să e odeclarație de anagajament către menținerea unui standard ridicatde per ormanță și pro esionalism Un ast el de cadru ar trebui săe susținut de rmele desofware autohtone Sunt cunoscute dejadiverse orme dintre care cel mai recent și promițător este cluster-ul Cluj I (httpwwwclujitro) și citez

About usCluj IT is a cluster association aiming to enhance the innovation

capabilities and competitiveness o the Romanian IT sector

Pare promițător și mă determină să icircmi imaginez un grup deprogramatori ormacircnd o comisie comună de acreditare a calitățiiproiectelor din iecare irmă partener la custer Poate o ideeambițioasă dar cu siguranță cu un impact bun pe termen lungAștept păreri de la cititori

1 httpenwikipediaorgwikiSOLID_28object-oriented_design29

programare

Young spiritMature organizationA shared vision

Join our journey

wwwfortechro

IT-ul romanesc quo vadis

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 1946

19wwwtodaysoftmagro | nr 25Iulie 2014

Icircn numărul 23 al revistei oday Sofware Magazine am icircnceput o discuţie despre ceea ceaduce nou Java SE8 Aproape unanim specialiştii icircn Java susţin că expresiilelambda ca topic general dar şi implicaţiile produse de acestea reprezintă cele mai importante

eature-uri ale versiunii actuale De aceea am considerat util ca primul articol să e despreacest topic

Discuţiile din acest articol sunt purtatela un nivel de di icultate mai ridicat pen-tru a permite evidenţierea unor aspecte deper ormanţă productivitate şi de reducere adimensiunii codului scris

Pentru icircnceput revin la expresiilelambda Prin expresiilambda putem crea metode ano-nime Uneori icircnsă expresiilelambda apeleazămetode care au deja un nume

Pentru a clarica lucrurile revin la exem-plul din articolul amintit la icircnceput Avem oclasă Product cu două atributename și price getter -i şisetter -i Voi mai adăuga proiectuluinostru o clasă POJO icircn care se a lă diversemetode de comparare cu semnături apro-piate de ale metodeicompare() din inter aţaComparator

public class ProductComparisons public int compareByName( Product a Product b )

return a getName() compareTo( b getName())

public int compareByPrice( Product a Product b ) return a getPrice() -

b getPrice()

Icircn clasa de test vom crea două obiecteProduct p1 şi p2 pe care le vom pune icircntr-unarray

Product[] basket = p1 p2

Vom sortaarray -ul olosind expresiileProductComparisons myComparison =

new ProductComparisons()

Arrays sort ( basket ( a b )-gt myComparison compareByName( a b ))

Această sintaxă este posibilă pentru cărezultatul expresieilambda este o clasă ano-tată FunctionalInter ace icircn cazul nostru

ComparatorIcircn locul olosirii expresiilorlambda Java SE8 o eră posibilitatea utilizării re e-rinţelor de metode prin intermediuloperatorului de domeniu Sintaxa este ast elmult simplicată

Revin la exemplul nostru şi aplic operato-rul anterior Sintaxa devineArrays sort ( basket

myComparison compareByName)

Avem următoarele tipuri de re erinţebull La o metodă a unui obiect (exemplul

anterior)bull La o metodă statică (exemplul anterior

poate i ușor customizat)La o metodă aunui obiect arbitrar de un tip particularArrays sort (stringArrayStringcompareToIgnoreCase)

bull La un constructorSupplierltProductgt s =Product new

unde Supplier este din

javautilfunctionSupplier

Un alt subiect pe care vreau să vi-l supunatenţiei este legat de inter eţe Inter eţeleconţineau pacircnă la această versiune doarsemnături de metode și constante Java 8propune o abordare care să icircmbunătăţescă

Java 8 noutăţi şi icircmbunătăţiri

programareprogramare

Silviu Dumitrescusilviudumitrescuaccesaeu

Java Line Manager Accesa

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2046

20 nr 25Iulie 2014 | wwwtodaysoftmagro

utilizabilitatea inter eţelor Dacă adaugăm noi semnături icircninter aţa atunci clasele ce o implementează ar trebui rescrisePentru a evita procesul rescrierii s-au introdus metodelede ault Pe lacircngă semnături și constante inter eţele vor conţine ast el șiimplementări

Voi da un exemplu simplu care să evidenţieze noile abordări

public interface MyInterface void myClassicMethod()

default void myDefaultMethod() System out println( ldquohello defaultrdquo )

static void myStaticMethod() System out println( ldquohello staticrdquo )

Respectiv clasa ce implementează inter aţa public class MyClass implements MyInterface

Override public void myClassicMethod() System out println( ldquohello classicrdquo )

Ca test avem public static void main(String[] args )

MyInterface mine = new MyClass() mine myClassicMethod() mine myDefaultMethod() MyInterface myStaticMethod ()

Surprindem ast el cele trei comportamentebull Cel prede init cu cali icatorul public abstract

(myClassicMethod)bull Cel cu implementarede ault

bull Cel cu implementarestatic d efault

Procesul de moștenire are suport și pentru acest nou compor-tament Alt el

bull Metodelede ault care nu sunt menţionate icircn inter aţa deri- vată moștenesc comportamentulde aul t din inter aţa de bază

bull Metodelede ault redeclarate icircn inter aţa derivată devinabstracte

bull Metodelede ault redenite icircn inter aţa derivată vor olo-site suprascris

Nu voi icircncheia acest articol ără să descriu cacircteva dintre

API-urile olosite icircn discuţiile anterioarebull javautil unction ce urnizează inter eţele uncţionale

ce sunt returnate ca tip prin intermediul expresiilambda Inter eţele uncționale reprezintă concepte abstracte precum

uncţiile acțiunile sau predicatelebull javautilstream ce urnizează clase pentru operaţii pe

stream -uri de elementeStream -urile di eră de colecţii prinbull stream -ul nu este o structură de date ci trans ormă o

structură de date icircntr-un pipeline de operaţiibull o operaţie pe unstream produce o operaţie dar nu

modică sursabull Operațiile pestream-uri sunt implementatelazy ceea ce

icircnseamnă că pot expune oportunităţi de optimizarebull stream -urile sunt practic in inite Există și operații

de scurtcircuitare care să producă ieșiri icircntr-un timp init(limit() ndFirst())

bull stream -urile sunt consumabile adică elementele sunt vizitate o singură dată Pentru o revizitare trebuie creat unalt stream

bull toate claselewrapper (Boolean Integer etc) au ost icircmbu-nătăţite cu metode care olosesc expresiilelambda și re erinţede metode

Discuţiile despre Java SE8 vor continua și icircn ediţiile viitoare aleSM Picircnă atunci lectură plăcută și o vară rumoasă

programareJava 8 noutăţi şi icircmbunătăţiri

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2146

21wwwtodaysoftmagro | nr 25Iulie 2014

Suportul JSON icircn PostgreSQL

Există o nevoie crescacircndă incontestabilă pentru exibilitateși scalabilitate icircn ceea ceprivește datele acesta indși motivul pentru care mulți au apelat la baze de dateNoSQL pe durata ultimilor ani Există avantajeși dezavantaje icircn ceea ce privește olo-

sirea lor mai ales că acestea nu au ost destinate să icircnlocuiască bazele de date relaționale

Dezvoltatoriiși arhitecții sof au deseori

dicultăți icircn a alege una sau alta icircn specialcacircnd ormatul datelor ce urmează să e olo-site este necunoscut sau poate i modi icatulterior O soluție de compromis este olosi-rea atacirct a bazelor de date relaționale cacirctși acelor non-relaționaleși crearea unui sistemde comunicare icircntre ele Icircnsă această soluțiepoate ajunge să dea mai multe dureri de capși probleme decacirct dacă s-ar olosi doar un sis-tem de baze de date

De ce nu 2 icircn 1Companii precum IBM și Oracle au icircnce-

put să o ere metode prin care Sistemele deBaze de Date Relaționale (RDBMS) și celenon-relaționale să coexiste PostgreSQL o erăo alternativă prin tipuri de date speciale cuo structură mai liberă și exibilă care imităcomportamentul NoSQL icircntr-un RDBMS

Icircncepacircnd cu versiunea 83 PostgreSQL aintrodus tipul de datehstore care este olo-sitor pentru racircnduri cu multe atribute caresunt rar examinate și date semi-structuratePermite stocarea de perechi cheie-valoare(similar cu unele NoSQL-uri) suportă di erite

operații și o eră uncții pentru manipularealor Icircn versiunea 92 a ost introdus tipul dedate JSON căruia i s-au adus icircmbunătățiri icircn

ceea ce privește per ormanța icircn versiunea 93

beta JSON (Javascript Object Notation) esteun ormatlightweight lizibil și independentde limbaj pe care Postgres icircl stochează sub

ormă de text

De ce l-ai lua icircn considerareAproape toți dezvoltatorii au sau au avut

de-a ace cu cerințe schimbătoare din parteaclienților și au simțit nevoia de exibilitatedin partea sistemului de stocare a datelor icircnspecial cacircnd vine vorba de aplicații cu cliențimultipli Icircn același timp clienții simt deseorinevoia de cacircmpuri personalizate și cer exi-bilitate Dar ce e de ăcut cacircnd unii clienți vorun cacircmp particular și alții vor patru pentruaceeași uncționalitate Sunt sigur că majori-tatea ați văzut coloane precumcustomField1customField2 customField3 anotherCustom-Field șamd Acestea pot evitate olosindun tablou (array ) dar ce acem cacircnd avemde stocat perechi Sau triplete Dacă cacircmpulparticular are atacirct o etichetă cacirct și o valoareSau chiar o dată asociată Lucrurile devinmai complicate

O altă problemă generală o reprezintă

tratarea numelor Există o listă de40 deneadevăruri despre nume 1 și doar ca să vă

1 Patrick McKenzie Falsehoods Programmers Believe

Raul Rene Lepsaraullepsa3pillarglobalcom

Java Devolper 3Pillar Global

programaremanagement

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2246

22 nr 25Iulie 2014 | wwwtodaysoftmagro

Suportul JSON icircn PostgreSQLprogramare

aceți o idee am enumerat cacircteva pe caredezvoltatorii icircn general omit să le ia icircncalcul

bull numele oamenilor pot conținenumere

bull oamenii pot avea un număr nedenitde nume

bull oamenii pot să nu aibă un prenumesau nume de amilie

bull oamenii pot avea mai mult de unnume canonic complet

bull numele nu sunt neapărat icircn ASCII șinu sunt neapărat scrise icircntr-un singur setde caractere

bull oamenii pot să nu aibă nume

Desigur probabil nu avem de a acecu multe din aceste cazuri dar nu poți niciodată sigur că sistemul nu va trebui

pe viitor să suporte nume chinezești Unmod tradițional de a stoca nume este ocombinație de prenume nume de ami-lie și eventual al doilea prenume care esteopțional Icircnsă dacă o persoană nu areprenume sau nume de amilie aceastăimplementare devine eronată

O posibilă cale de a rezolva această pro-blemă este prin olosirea unui JSON ldquo rst_namerdquo ldquoRonaldordquo ldquomother_namerdquo rdquode Assisrdquo ldquolast_namerdquo ldquoMoreirardquo

ldquonicknamesrdquo [ldquoRonaldinhordquoldquoGauacutechordquo]

Implementarea de mai sus poate adăugamuncă icircn plus prin schimbarea cacircmpuluide ull_name de ecare dată cacircnd unul dinrestul cacircmpurilor este schimbat dar acestaeste doar un exemplu Icircn general soluțiaAbout Names Kalzumeus Blog Iunie 2010

este dependentă de aplicație și de cliențiițintă ai acesteia dar reprezentarea de maisus o eră multă exibilitate icircn comparațiecu modul clasic de stocare a numelor dincadrul bazelor de date relaționale Avacircndrar nevoie de accesarea tuturor numelorputem vedea utilitatea acestui tip de repre-zentare De ce am crea o coloană pentrunumele mamei cacircnd avem rareori nevoiede el De ce s-ar crea o coloană pentruporeclă sau nume de alint cacircnd uneleentități ar putea avea mai mult de unulsingur Aceeași logică poate aplicată șicelorlalte nume

Funcții și OperatoriCu toate că lista completă de uncții și

operatori poate găsită icircn documentațiacelor de la Postgres este important de

menționat că un obiect JSON e accesatolosind operatorul rdquo-gtrdquo (poate returnat

și ca text olosind operatorul rdquo-gtgtrdquo) Deexemplu pentru o coloanănume accesa-rea numelui de amilie s-ar ace olosindnames-gtgtrsquolast_namersquo Operatorul prezentatanterior poate olosit și pentru accesareaunui element a lat la o anumită pozițieicircntr-un tablou (names-gtrsquonicknamesrsquo)-gt0 ar icircntoarce primul obiect din tabloulnick-names din cadrul coloanei

Pe lacircngă operatori icircncepacircnd cu versiu-

nea 93 au ost adăugate și multiple uncțiipentru a ajuta dezvoltatorii icircn olosireaacestui tip de coloană precum uncții pen-tru extragerea obiectelor dintr-un tabloude JSON pentru trans ormarea unui racircndicircntr-un obiect JSON pentru expandareaunui JSON icircntr-un set de perechi cheie- valoare sau pentru conversia oricăruielement icircntr-un obiect JSON

Avantajele tipului de coloană JSONPrimul avantaj ale acestui tip de

coloană este caracterul de ormat rdquoopenstandardrdquo ind independent de limbaj Icircnal doilea racircnd acilitează tratarea cerințelorschimbătoare ale clienților prin scalabili-tate și exibilitate Devine olositor cacircnde nevoie de stocarea gra urilor de obiectemulti-nivel deoarece o eră per ormanțăridicată și codul icircn sine este mai ușor descris și de menținut decacirct icircn implementă-rile obișnuite de gra e Coloana JSON nuocupă mult spațiu (e stocată ca și text) șipermite stocarea de pacircnă la 1 GB de dateicircntr-o singură coloană Icircn plus previneSQL injection icircn mod implicit deoareceobiectele JSON sunt validate icircnainte de a persistate

Cheile străine pot evitate prin denor-malizarea datelor și cacircmpurile din cadrulinterogărilor complexe pot accesate ărăsă e nevoie de join cu alte tabele (posibilmari) o erind ast el un comportamentsimilar cu NoSQL-uri icircntr-un sistem debaze de date relațional

Se poate dovedi a un plus icircn aplicațiileweb acilitacircnd transportul și conversiadatelor de pe client cătrecontroller -e șiapoi către nivelul de acces la date stocacircndobiectele JSON venite dinspre client

Aceste tipuri de date pot indexate iaricircn plus indecși pot creați icircn cadrul obiec-telor JSON (de exemplu pentru tablouridin cadrul unui JSON) Indecșii curenț isuportați atacirct dehstore cacirct și de coloanele JSON sunt aproape la el de per ormanți cași cei ai tipurilor de date standard Dar selucrează lanoua generație de indecși GIN 2

2 Alexander Korotkov Oleg Bartunov Next

Generation o GIN PostgreSQL Con erence Europe 2013 Dublin

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2346

23wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Aceștia au ost deja implementați pentru hstore icircn versiunea icircncurs de dezvoltare94 Comparațiile de per ormanță cu MongoDB arată că deși scanarea secvențială este aproape la el la nivel deper ormanță scanarea de indecși este mai rapidă decacirct icircn MongoAcești indecși vor cel mai probabil aplicați și tipului de date JSON icircncepacircnd cu versiunea94

DezavantajeCel mai mare dezavantaj al tipului de date JSON este aptul

că nu e portabil ind momentan suportat doar icircn PostgreSQLAlte dezavantaje includ imposibilitatea de a adăuga chei străineși sintaxa ciudată mai puțin lizibilă decacirct icircn cazul interogărilorobișnuite

Icircn plus interogările care sunt simple pe tipuri de date comunedevin complicate cacircnd se olosește tipul de date JSON icircn specialcacircnd avem de-a ace cu tablouri de obiecte Pentru a exemplicaacest aspect considerați o tabelă de utilizatoriusers care stocheazănumerele de tele on ca și un tablou de obiecte JSON precum esteprezentat icircnFigura 1 Cu toate că acest tip de congurare arată

mai bine decacirct crearea de coloane pentru ecare tip de numărprecumhome_number work_number șamd interogarea tabeleipentru a aduce numerele de tele on de tip primary de exemplu estedestul de complicatăRezultatul interogării este așat icircnFigura 2

SELECT usersid phone-gtgtrsquonumberrsquo AS numberFROM users INNER JOIN( SELECT id

json_array_elements(phones)AS phone

FROM usersWHERE id=usersid

) phonesON phonesid = usersid

WHERE phone-gtgtrsquotypersquo=rsquoprimaryrsquo

Figura 1 - Numere de telefon stocate ca tablou de

obiecte JSON ecare avacircnd un tip și un număr

Figura 2 - Numerele de tip rdquoprimaryrdquo returnate de interogare

Icircn general nu putem siguri că numărul de tele on de tip pri-mary se aă pe prima poziție a tabloului acest lucru ind subiectivși dependent de sistem Cu toate acestea impunerea unor ast el deconstracircngeri pot duce la interogări simplicate avacircnd operatorulrdquo-gtrdquo pentru a accesa direct elementul de pe pozițian a unui tablouDe asemenea important de notat este că exemplul precedent pre-zintă un caz simplu de stocare de numere de tele on Interogăriledevin cu atacirct mai complicate cu cacirct datele stocate icircn tablourileJSON sunt mai complexe icircn special cacircnd apare nevoia de a ace join acestor date din cadrul tabloului cu alte tabele

Concluzii A opta doar pentru un sistem de baze de date relațional sau

pentru unul NoSQL nu reprezintă icircntotdeauna o soluție viabilăCu toate că se ac pași pentru a ușura integrarea acestor douătipuri de baze de date cel puțin pentru moment acest lucru poatesă se dovedească a o prea mare bătaie de cap

PostgreSQL o eră o soluție de rdquocompromisrdquo prin suportulpentru coloanehstore care imită mediile de stocare cheie-valoareși pentru coloane de tip JSON care permit stocarea de obiecte șitablouri JSON Icircn plus o eră operatori și uncții pentru a acilitamanipularea datelor suportacircnd icircn același timp și indecși atacirct pedate JSON cacirct și pe cacircmpuri din interiorul lor

Dacă această soluție este sau nu optimă este o icircntrebare subiec-tivă dependentă de sistem și de cerințele pe care acesta trebuiesă le icircndeplinească Ceea ce este important de ținut minte este cădezvoltatorul are la dispoziție puterea și complexitatea sistemuluide baze de date relațional Postgres indi erent dacă alege sau nu să

olosească tipul de date JSON

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2446

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2546

25wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

bull Găsești niște comenzi (instrumente sau scrieri sau pur șisimplu comenzi de pe consolă) pe care le rulezi după un pattern repetitiv (le vom numi sarcini)

bull Grupezi acele comenzi care pot rulate ca ununit să spu-nem că creezi un utilizator icircn AD icirci creezi e-mailul repartizeziutilizatorul icircntr-un grup (pe aceasta o vom numi o lucrare ( job))

bull Grupezi icircmpreună lucrări ( jobs) care pot să se deruleze icircnparalel ca și după ce ai utilizatorul icircn AD creacircnd diverse per-misiuni bazate pe grupul AD icircn multe instrumente di erite ()

bull Grupezi etapele (stages) icircntr-o secvență ast el icircncacirct să poțiace grupuri de comenzi icircnlănțuite și complexe Ai putea avea o

primă etapă care să acă toate cele de mai sus iar o a doua etapăcare să pregătească instalarea unui laptop sau a unui desktop icircnparalel (vom numi asta un produs icircn curs de dezvoltare)

bull Poți avea chiar produse icircn curs de dezvoltare legate icircmpre-ună sau care să se deruleze icircn paralel

Principalele caracteristici care icircți permit să atingi acest nivelridicat de exibilitate

Comenzi personalizateComenzile personalizate (custom) sunt o listă de comenzi pe

care le poți olosi pentru a ace lucruri icircntr-o sarcină Ce e rumosla GO este că poți rula literalmente orice utilizacircnd un terminal(Linux Windows Mac OSX) Dacă comenzile de bază nu suntsuciente pentru tine este posibil să icircți creezi singur comenzi maicomplexe utilizacircndscript-uri (gacircndește-te la PowerShell Pythonetc) Comenzile personalizate icircți permit de asemenea să urmăreștistatutul unei comenzi care tocmai a rulat Noi am olositscript -uriPython pentru a avea și mai multă exibilitate icircn procesarea rezul-tatului (output-ul) și trimiterea icircnapoi a bdquocodului statusrdquo ast el

icircncacirct să știi dacă o sarcină (care rulează comanda) a eșuat sau nuArtefacte ndash Construiește și testează

Arte actele sunt al doilea concept grozav icircn GO unde olucrare (care are sarcini multiple cu comenzi personalizate) poategenera un rezultat și tu ai putea să bdquoicirci spuirdquo lui GO că acesta esteun arte act Chiar dacă ai doar două tipuri de arte acte permisede GO Arte actul Build este destul de generic pentru a oriceCu arte actele poți aduce icircn instrument mai multe in ormații dela output (rezultat) dar poți de asemenea să le urnizezi pentru

utilizare icircntr-o Etapă di erită sau la un Produs icircn dezvoltare di e-rit Imaginați-vă unscript care generează un binar temporar decare ai nevoie mai icircncolo icircn cursul dezvoltării produsului Ai puteautiliza arte acte pentru a nu mai avea nevoie de unrepo externpentru ceva care este atacirct de volatil De asemenea Arte actele estsunt elul icircn care GO poate interpreta rezultatele testelor pentruo Etapă

Pe baza arte actelor poți avea niștetab-uri speciale care săicircncarce H ML-ul pe care l-ai generat cu o comandă pentru a-l vedea direct icircn instrument

Congurația XMLIcircntreaga con igurație pentru server stă icircntr-o versiune de

ișier XML Dacă inter ața pentru utilizator nu este su icientăpoți oricacircnd să editezi manual Această uncție este disponibilănumai pentru Super Admin deoarece este oarte ușor și posibilsă icircncurci lucrurile de acolo Congurația XML stă icircntr-o zonăde text care are multă validare dar un lucru pe care probabil icircl vei ace icircn timp ce icircți denești uxul de lucru este să redenumești

anumite Produse care sunt icircn dezvoltare iar acest lucru poate săicircți cauzeze probleme

BibliograeForum public httpsgroupsgooglecom orum orum

go-cdDocumentație httpsgoappbet airgohelpindexhtmlPagină comunitate mai veche httpsupportthoughtworks

comcategories20002778-Go-Community-SupportWebinar introductiv httpwwwgocd20140310go-webi-

nar-recordinghtml

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2646

26 nr 25Iulie 2014 | wwwtodaysoftmagro

management

Managementul unei echipe de dezvoltaresofware este o meserie pe care tre-cerea timpului nu a trans ormat-o așa cum se icircntacircmplă de obicei icircntr-unamai ușoară De la publicarea lucrării Agile Mani estoicircn 2001 multe companii

și echipe care dezvoltă produse sof au practicat și testat metodele și tehnicile Agile cusucces

Cunoscută și sub numele deExtremeProject Management (XPM) aceastăabordare a managementului de proiectare ca scop icircmbunătățirea răspunsuluiprodusului la schimbarea speci icațiilorclientului Așadar icircn timp ce echipa Agile

se concentrează pe creșterea nivelului deadaptabilitate se pierde din importanțaacordată icircn mod normal predictibilității

Lipsa de predictibilitate a echipei esteicircntr-adevăr dezavantajul metodologieiAgile Acest articol vorbește despre modulicircn care metodele Agile sunt aplicate icircnXPM și prezintă cacircteva exemple sperămnoi utile legate de modul icircn care putemtraduce teoria Agile icircn proiecte de succespentru echipă și prot pentru organizație

Echipa AgileIcircntacirci de toate XPM nu se potrivește

oricărei echipe După cum se specică icircn Agile Mani esto vorbim despre echipe carese organizează singure ormate dintr-unnumăr mic de dezvoltatori seniori carelucrează pe proiecte ale căror specicații seschimbă recvent De aceea am avea nevoiede o cultură icircn echipă bazată pe un răspunspozitiv la schimbări - o echipă icircn care existăcomunicare colaborare și icircn care rolurile sepot schimba icircn orice moment

Rolurile icircntr-o echipă Agile sunt de ase-

menea oarte importante O echipă Agilenu are nevoie de managerul clasic memb-rii acesteia sunt direct resposabili de muncalor Scrum Master este managerul echipeiiar rolul său este ca acela al unui antrenor

El are abilități de organizare obține resursepentru echipă și conduce echipa spre real-izarea obiectivelor sale Alte roluri icircn echipaAgile sunt Domain Expert echnicalLead Independent ester Product Ownerși alți Stakeholders Așa cum vom vedea

mai tacircrziu ecare dintre acești membri seconcentrează pe di erite aspecte ale proi-ectului icircn care sunt toți implicați și aceastaeste adevărata provocare a echipei Agile

Aspectele pe care metodele Agile icircșipropun să le dezvolte icircntr-o echipă le-amstructurat icircn trei categoriicomunicare eciențăși calitate

După cum am menționat mai sus XPMse bazează pe o comunicare constantă șiproductivă Prin intermediul procedu-rilor Agile un ast el de mediu de lucrupoate construit pentru a asigura evoluțiași optimizarea proceselor Iată care suntinstrumentele Agile ședința de planicare(Iteration Planning) Poker Planning siste-mul de urmărire a vitezei de lucru a echipei(Velocity racking) ședințele de retrospectivă

E iciența echipei este asigurată deședințele zilnice de Scrum (stand-ups ) șiobținerea de eed-back icircn timp scurt ceea ceconduce la un ciclu de lucru (Sprint) oarteadaptabil Echipa Agile se concentrează icircnacelași timp pe calitate prin procesul de

integrare continuă pair-programming pro-cesele de testare re actorizare șireview alcodului D3 (Design Driven Development)și DD ( est Driven Development)

Scrum cu Programare Extremă

Alina Cherechesalinacherecheșyardicom

Senior Software Developeramp Scrum Master Yardi

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2746

27wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

Dimensiunile AgileMetodologia Agile ne icircnvață multe

lucruri și abordează dezvoltarea de produsdin di erite puncte de vedere Cred că unadintre cele mai importante dimensiuni ar Procesul Agile Nedenit (the Agile UndenedProcess) - principiul con orm căruia unproces sau proiect Agile nu este icircn nici unmoment pe deplin denit De asemenea sere eră la conceptul de Agile Modeling doc-umentare arhitectură și cerințe care se potschimba icircn orice moment și care trebuie săe icircntotdeauna clare și transparente Esteprincipiul care pune accentul pe di erențadintre Development Release și ProductionRelease sau di erența dintre viteza de lucrua echipei și icircndeplinirea angajamentelorprivind lansarea produsului la client

Așa cum am menționat mai sus Agile

nu vizează proiecte care necesită previzi-uni Nu se ocalizează pe proceduri sauarte acte ci pe metodologii pentru oameniIcircn terminologia Agile acestea sunt numiteCrystal Methods lansarea recventă de codutilizabil pentru client icircmbunătățirea prinre-evaluare testarea prin intermediul utili-zatorilor experți teste automate

O altă dimensiune Agile esteFeatureDriven Development Aceasta prezintăcele mai bune practici din perspectivaicircnțelegerii businessului și a clientului așa

numitul Domain Driven Development(D3) lansări regulate și transparență icircnceea ce privește progresul proiectului șirezultatele sale Și cu aceste practici neapropiem tot mai mult de cealaltă parte aAgile managemenul resurselor și livrareala timp

Icircn Agile managementul timpului al

calității și al costului se numește Dynamic

System Development Method Se re eră laconcentrarea pe necesitățile businessuluidezvoltarea și lansarea rapidă ără a secompromite icircnsă calitatea la demonstrareacontrolului prin dezvoltarea graduală și lacomunicarea constantă Această dimensi-une introduce termenul de prioritizare (themusts theshoulds thecoulds and thewonrsquothaves)

Chiar dacă voi prezenta utilizareaScrum icircn XPM există următoarele prin-cipii din metodologia Kanban care vin să

completeze oarte bine ideea pe care icircncercsă o conturez privind livrarea la timp șicontrolul resurselor Și aceste principii arputea i rezumate prin raza ldquoOprește-tesă icircncepi și icircncepe să terminirdquo (ldquoStop start-ing and start nishingrdquo) Cu alte cuvinteechipa ar trebui să convină să urmăreascăschimbarea progresivă și să respecte

procesul curent și rolurile care s-au stabilit

la icircnceputul proiectuluiAm spus deja că Agile nu se

concentrează pe proceduri ci pe oameniși metode pentru oameni Există aceastăultimă dimensiune Agile care se re eră lace anume se dezvoltă mai degrabă decacirct lacum se dezvoltă Este vorba de teoria Agilecunoscută sub numele deLean So twareDevelopment - politici și proceduri scrise icircnscopul de a controla consumul de resurseUnele dintre aceste politici sunt elimin-area pierderilor luarea unor decizii cacirct mai

tacircrziu posibil livrarea cacirct mai rapidă posi-bil asigurarea unei viziuni de ansamblu șidemonstrarea integrității

ProvocareaNe vom icircntoarce acum la mențiunea

mea cum că membri di eriți ai echipei Agileau interese di erite atunci cacircnd participă la

management

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2846

28 nr 25Iulie 2014 | wwwtodaysoftmagro

dezvoltarea unui proiect Desigur cu toțiiicircși ac treaba icircn cel mai bun mod posibil șiicircnțeleg și respectă Scopul Proiectului Agile(cesofware trebuie construit și livrat) Daricircn timp ce membrii echipei sunt interesațide metodele de inginerie și de practicileExtreme Programming (XP) precum și descrierea de cod de calitate Scrum Master seaxează pe adaptarea la cerințelor de sistemimprevizibile icircn același timp ind capabilsă măsoare viteza de lucru a echipei Pede altă parte Product Owner-ul nu esteinteresat icircnsă nici de viteza echipei nici decalitatea codului El ar dori ca echipa să eicircn măsură să acă estimări exacte privindtermenul de inalizare a proiectelor Cualte cuvinte Product Owner-ul precum șialți Stakeholders ar dori ca echipa să e previzibilă

Pentru a putea prezice lansarea pro-dusului o echipă trebuie să e capabilă săestimeze icircn primul racircnd etapele de dez- voltare Pentru aceasta avem instrumenteleScrum pentru managementul de proiectPoker Planning Velocity racking și SprintRetrospectives

Vă voi prezenta icircn continuare cacirctevaexemple concrete despre cum Scrum și XPpot conlucra pentru a ne ajuta să atingemscopul predictibilității

Scrum și XP - Cum facem săfuncționezeDe obicei veți găsi mai multe arti-

cole care vorbesc despre di erențele dintreScrum și XP Deși ambele se concentreazăpe producerea deso tware uncțional icircncel mai scurt timp posibil și pun accentulpe importanța comunicării icircntre echipeele sunt descrise mai degrabă ca abordăriopuse icircn dezvoltarea de produse sof

Acum că am văzut care sunt di erențeledintre Scrumș i XP ne vom axa pe instru-mentele care icircmbină avantajele celor douămetodologii

Documentare și TestareO echipă Scrum cuprinde toate per-

soanele necesare icircn dezvoltarea de sofwareuncțional Acest lucru icircnseamnă dez-

voltatori testeri și analiști care lucreazăicircmpreună pentru un obiectiv comunChiar dacă am acceptat principiile Agilede dezvoltare managementul de livrare șiplanicarea proiectului se ac icircn continu-are icircn concordanță cu modelul Water all

Realitatea Agile icircn cadrul organizațiilor adeviat de la ideile inițiale descrise icircn Agile Mani esto și a devenit mai mult o abordarehibridă a managementului unui ciclu dedezvoltare numită Water-Scrum-Fall

Water - Cerințe și specicații (toate docu-mentele necesare actualizate)Scrum- Proiectare și implementare (prac-tici de inginerie)Fall - Veri icare icircntreținere (testareautomată lansare și livrare)

XPM se re eră la crearea de rezultatede calitate uncționale care urnizează ceamai mare valoare inanciară posibilă icircnacelași timp reducacircnd riscul de eșec Prinadoptarea Water-Scrum-Fall se ace icircn modsubtil trecerea de la modelul Agile axat peechipă la modelul Agile axat pe nevoilede business Prin combinarea beneciiloraduse de metodologiile de dezvoltare Agileși Water all se preia controlul asupra eluluiicircn care echipa interacționează cu alte părțiale organizației reducacircnd treptat consumul

de resurse și crescacircnd predictibilitatea icircnceea ce privește estimările și livrarea

Măsurarea vitezeiIcircn Scrum viteza este reprezentată de

cacirct de mult poate dezvolta o echipă icircncadrul unei iterații Acest lucru poate iestimat analizacircnd iterații anterioare pre-supunacircnd că membrii echipeiș i duratasprintului rămacircn aceleaș i Rapoartele de viteză sunt olosite laședințele de plani-care cu scopul de a deni următorulsprint

Odată stabilită viteza va olosit pentruplanicarea livrărilorGra ice de măsurarea a vitezei unei

echipebull Burndown Chartbull Velocity racking

Cu XPsprint -urile sunt exibile și noitask-uri pot integrate pe măsură ce aparicircn timpul unei iterații Această abordareicircngreunează procesul de măsurare a vitezeiși ace aproape imposibilă olosirea unuiBurndown Chart

Atunci cacircnd un noutask este adăugaticircn timpul unuisprint un altul ar trebui săse icircntoarcă icircnbacklog Icircn acest el numărulde puncte (story points) stabilite pentru unsprint rămacircne așa cum a ost plănuit inițialDacă acest lucru nu se icircntacircmplă șitask-uri noi sunt adăugate la volumul de lucruexistent echipa nu va putea să completezesprint -ul con orm planului și prin urmarenu-și va putea respecta angajamentele

Ecuația Velocity racking

Planned (sp) + Added (sp)- Removed (sp) = Assigned (sp) = Burned (sp)

Pair-programming și Code reviewingUn principiu important al XP este

proprietatea colectivă asupra codului eimportant să vă asigurați că nici o bucatăde cod nu ajunge icircn producție ără a irevizuită de o a doua persoană Scopulacestei abordări nu este numai de a livracod de calitate cu mai puținebug -uri ci șide a ace in ormația și cunoștințele să cir-cule icircntre membrii echipei otodată un altscop este acela de a da o șansădeveloper -ilor să preia ideile bune de la colegii lor

Pentru a vă asigura că toate costurilede revizuire a codului nu depășesc bene-ciile vă o erim o idee privind ce ar putea

uncționa și cacircndS-ar putea să cunoașteți care sunt

etapele unei echipe AgileForming Storming Norming și Per orming

Icircn uncție de etapa icircn care se aă echipaicircn momentul respectiv anumite abordăripentru revizuirea de cod sunt mai potrivitedecacirct altele

Icircn etapa deForming este indicat camembrii echipei să ormeze perechi și sălucreze icircmpreună Icircn elul acesta cei cu maipuțină experiență pot lucra cusenior devel-opers și membrii echipei care au mai multecunoștințe despre proiect pot comunicadin in ormații și celorlalți Icircn elul acestaechipa este mai productivă și mai ecientă

decacirct dacă ecare membru ar lucra pe contpropriuCacircnd echipa se a lă icircn azaNorming

sesiunile de revizuire a codului sunt maie iciente dacă participă icircntreaga echipăAcesta este momentul icircn care echipa icircșistabilește standardele și principiile pen-tru codare și cacircnd se iau multe deciziiimportante

Icircn cele din urmă dacă echipa estematură și icircn aza dePer orming lucrul indi- vidual este mult mai ecient decacirct dacă maimulte persoane lucrează pe aceeași bucatăde codPeer-reviewing este tipul de veri-care cel mai potrivit icircn acest caz

Practica bate teoriaUltima dar și cea mai importantă

regulă icircn XPM este să ne asigurăm căpunem icircn practică cacirct mai multe din-tre cunoștințele pe care le avem cacirct mairepede posibil Fiecare ședință a echi-pei ar trebui să se nalizeze cu un set deconcluzii și propuneri de acțiuni și nicioretrospectivă nu ar trebui să stabilească noi

scopuri pentru echipă atacircta timp cacirct celeanterioare nu au ost icircndeplinite rebuie sămenținem echipa responsabilă concentratăși conștientă de propriile responsabilități

managementScrum cu Programare Extremă

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 2946

29wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE arhitectură

Principii de design Agile

Programareaagile se bazează pe dezvoltarea produsului sofware icircn blocuri mici și incrementale icircn care cerințele clienților șisoluțiile o erite de programatori evoluează simultan

Programareaagile are la bază o stracircnsălegătură icircntre calitatea nală a produsuluiși livrările recvente ale uncționalitățilordezvoltate incremental Cu cacirct se reali-zează mai multe livrări cu atacirct calitateaprodusului nal va mai ridicată Icircntr-unproces de implementareagile cerințele demodicare sunt privite ca un lucru pozitiv

indi erent de aza de dezvoltare icircn care seaă proiectul Aceasta deoarece cerințelede modicare evidențiază aptul că echipa aicircnțeles ceea ce este necesar pentru ca produ-sul sofware să satis acă necesitățile piețeiDin acest motiv este necesar ca o echipăagil e să mențină structura codului cacirctmai exibilă ast el icircncacirct noile cerințe aleclienților să aibă un impact cacirct mai redusasupra arhitecturii existente Aceasta nuicircnseamnă icircnsă că echipa va ace un e ortsuplimentar luacircnd in considerare viitoarele

cerințe și necesități ale clienților sau că vainvesti mai mult timp pentru a implementao in rastructură care să suporte posibilecerințe necesare icircn viitor Dar evidențiază

aptul căaccentul este pus de dezvolta-rea produsului curent cacirct mai e icientIcircn acest acest scop vom investiga cacirctevadintre principiile deso tware design carese impun aplicate de la o iterație la altade către un programatoragile pentru amenține cacirct mai curat și lexibil posibilcodul și designul proiectului Principiileau ost propuse de către Robert Martinicircn lucrarea Agile So tware DevelopmentPrinciples Patterns and Practices [1]

Principiul Singurei Responsabilițăti(Single Responsability Principle SRP)

O clasă trebuie să aibă un singur motiv pentru a modicată

Icircn contextul SRP responsabilitateapoate denită ca ldquoun motiv pentru modi- carerdquo Atunci cacircnd cerințele proiectului semodică modicările vor vizibile prin

modicarea responsabilității claselor Dacăo clasă are mai multe responsabilități atunci va avea mai multe motive de schimbareAvacircnd mai multe responsabilități cuplatemodi icări asupra unei responsabilități

vor impl ica modi i cări asupra celor-lalte responsabilități ale clasei Acestacorelație conduce către un design ragilFragilitatea icircnsemnă că o modicare adusăsistemului produce o ruptură icircn design icircnlocuri care nu au nici o legătură conceptu-ală cu partea care a ost modicată

ExempluSă presupunem că aveam o clasă

care icircncapsulează conceptul de tele-on și uncționalități le a erente

class Phone

public void Dial(const stringampphoneNumber)

public void Hangup()public void Send(const stringamp

message)

public Receive(const stringampmessage)

Acesta clasă ar putea i consideratărezonabilă oate cele patru metode de-nite reprezintă uncționalități re eritoare laconceptul de tele on Și totuși această clasăare două responsabilități MetodeleDial siHangup sunt responsabile pentru realiza-rea conexiunii icircn timp ce metodeleSendși Receivesunt responsabile pentru trans-miterea datelor

Icircn cazul icircn care signatura metodelorresponsabile pentru realizarea conexiuniiar supuse schimbărilor acest design ar rigid deoarece toate clasele care apeleazămetodeleDial și Hangup ar trebui recom-pilate Pentru a evita această situație estenecesar un re-design care să separe celedouă responsabilități

Figura 1

Icircn aces t exemplu ce le douăresponsabilități sunt separate ast el icircncacirctclasa care le utilizează - Phone nu trebuiesă le cupleze pe amacircndouă Schimbărileasupra conexiunii nu vor inuența meto-dele responsabile cu transmisia datelorPe de altă parte icircn cazul icircn care celedouă responsabilități nu prezintă motive

de modi icare icircn timp nu este nece-sară nici separarea lor Cu alte cuvinteresponsabilitățile unei clase trebuie sepa-rate numai dacă există șanse reale caresponsabilitățile să producă modi icăriinuențacircndu-se reciproc

ConcluziiPrincipiul singurei responsabilități este

unul dintre cele mai simple și cu toate aces-tea unul dintre cele mai dicil de aplicatIdenticarea și separarea responsabilităților

este unul dintre aspectele undamentale aledesignuluisofwar e Icircn principiile deagilesofware design pe care le vom analiza icircncontinuare vom vedea că vom reveni icircntr-un el sau altul asupra acestui principiu

Principiul Deschis-Icircnchis (OpenClosed Principle OCP)

Entitățile software (clase module funcții etc) trebuie să e deschise pentruextensii dar icircnchise pentru modicări

Atunci cacircnd o singură modi icareasupra unui modul so tware rezultăicircn necesitatea de a modi ica o serie dealte module atunci designul su eră derigiditate Principiul OCP susține re acto-rizarea designului ast el icircncacirct modi icăriulterioare de același tip nu vor mai pro-duce modi icări asupra codului existent care deja uncționează icircn schimb vanecesita doar adăugarea de noi module

Un modul so tware care respectă princi-piul Deschis-Icircnchis are două caracteristici

principalebull ldquoDeschis pentru extensi i rdquoAcesta icircnseamnă că acel comportamental codului poate i extins Atunci cacircndcerințele proiectului se modică codul

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3046

30 nr 25Iulie 2014 | wwwtodaysoftmagro

poate extins cu implementarea noilorcerințe adică se poate modica compor-tamentul modulului deja existent

bull ldquoIcircnchis pentru modi icărirdquo Implementarea noilor cerințe nu necesitămodicări asupra codului deja existent

Abstractizarea este metoda care per-mite modicarea comportamentului unuimodul so tware ără a modi ica și coduldeja existent al acestuia Icircn C++ Java sauoricare alt limbaj orientat obiect este posi-bil să se creeze o abstractizare care o erăo inter ață ixă și un număr nelimitat deimplementări adică de comportamentedi erite [2]

Icircn Fig 2 este prezentată o diagramă declase care nu respectă principiul deschis-icircnchis Atacirct clasa Client cacirct și clasa Server

sunt clase concrete Clasa Client oloseșteclasa Server Dacă mai tacircrziu se dorește caaceastă clasă Client să olosească un alt tipde server va nevoie să se modice clasaClient ast el icircncacirct să utilizeze noul server

Figure 2 Exemplu carenu respecta principiul OCP 1

Icircn Fig 3 se prezintă același design ca și

icircn Fig 2 dar de această dată principiul des-chis-icircnchis este respectat Icircn acest caz a ostintrodusă clasa abstractă AbstractServeriar clasa Client olosește această abstrac-tizare otuși clasa Client va olosi de aptclasa Server care implementează clasaClientInter ace Dacă icircn viitor se dorește

olosirea unui alt tip de server tot ce tre-buie ăcut va să se implementeze o nouăclasă derivată din clasa ClientInter acedar de această dată clientul nu mai trebuiemodicat

Figura 3 Exemplu care respectă principiul OCP 2

Un aspect particular icircn acest exemplueste modul icircn care am denumit clasa abs-tractă ClientInter ace și nuServerInter acespre exemplu Motivul pentru această ale-

gere este aptul căclasele abstracte suntmai apropiate de clasele client pe care le folosesc decacirct de clasele concrete pe carele implementează

Principiul Deschis -Icircnchis este utilizat și

icircn design pattern-urile Strategy și Plugin [3]Spre exempluFig4 prezintă designulcorespunzător care respectă principiuldeschis-icircnchis

Figura 4

ClasaSort_Objecte ectuează o operațiede sortare a obiectelor operație carepoate i descrisă icircn inter ața abstractăSort_Object_Inter ace Clasele derivate dinclasa abstractăSort_Object_Inter ace sunt

obligate să implementeze metoda Sort_Function() dar au icircn același timp libertateade a o eri orice implementare doresc pentruaceastă inter ață Ast el comportamentulspecicat de inter ața metodeivoid Sort_Function() poate extins și modicat princrearea de noi subtipuri ale clasei abstracteSort_Object_Inter ace

Icircn deniția clasei Sort_Object vom aveaurmătoarele metodevoid Sort_ObjectSort_Function()

m_sort_algorithm-gtsortFunction()void Sort_ObjectSet_Sort_Algorithm(const Sort_Object_Inter -face sort_algorithm)

stdcout ltlt bdquoSetting a newsorting algorithmrdquo ltlt stdendl

m_sort_algorithm = sort_algo -rithm

ConcluziiPrincipalele mecanisme icircn spatele

acestui principiu suntabstractizarea și poli-mor ismul Ori de cacircte ori codul trebuiemodicat pentru implementarea unei noi

uncționalități trebuie să se ia icircn considerareși crearea unei abstracții care să urnizeze ointer ață pentru comportamentul dorit șicare să o ere icircn același timp posibilitateade a adăuga icircn viitor noi comportamentepentru aceeași inter ață Desigur nuicircntotdeauna este necesară crearea uneiabstractizări Acestea metodă este utilă icircngeneral acolo unde apar modicări recventeCon ormarea la principiul deschis-icircnchiseste costisitoare Aceasta necesită timp de

dezvoltare și e ort pentru a crea abstracțiilenecesare Aceste abstracții incrementeazăcomplexitateadesignului sofware

Icircn schimb principiul deschis-inchisreprezintă din multe puncte de vedereun

element central din programarea orientatăobiect Con ormarea la acest principiuconduce la cele mai mari benecii ale pro-gramării orientate obiect acestea iind

lexibilitatea reutilizarea și mentenanțacodului

Principiu de substituire Liskov (LSP)

ipurile de bază trebuie să poată sub-stituite de tipurile derivate

Icircn limbaje precum C++ sau Javamecanismul principal prin care se reali-zează abstractizarea și polimorsmul estemoștenirea Pentru a crea o ierarhie demoștenire corectă trebuie să ne asigurămcă clasele derivate extind ără a icircnlocui

uncționalitatea claselor de bază Cu altecuvinte uncțiile care utilizează pointer -i

sau re erințe la clasele de bază trebuie săpoată olosi instanțe ale claselor derivate

ară să icircși dea seama de acest lucru Icircncaz contrar noile clase pot produce e ectenedorite cacircnd sunt utilizate icircn entitațileprogramului deja existent Importanțaprincipiului LSP devine evidentă icircnmomentul icircn care este incălcat

ExempluSă presupunem că avem o clasă Shape

a cărei obiecte sunt deja olosite undeva icircnaplicație și care are o metodaSetSize care

proprietatea mSize ce poate olosită calatură sau diametru icircn uncție de igurareprezentată

class Shape

publicvoid SetSize(double size)void GetSize(doubleamp size)

privatedouble mSize

Mai tacircrziu extindem aplicația și adă-ugăm clasele Square și Circle Avacircnd icircn vedere aptul că moștenirea modelează orelație bdquoeste de tipul rdquo ( IS_A relationship)noile clase Square si Circle pot derivatedin clasa Shape

Figura 5

Să presupunem icircn continuare că obiec-tele Shape sunt returnate de o metodă actory pe baza unor condiții stabilite laruntime ast el icircncacirct nu cunoaștem exact tipul

Principii de design Agilearhitectură

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3146

31wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

obiectului returnat Dar știm că este ShapeObținem obiectul Shape icirci setăm proprie-tatea size de 10 unități și icirci calculăm ariaPentru un obiectsquare aria va i 100

void f(Shapeamp shape oatamp area)

shapeSetSize(10)shapeGetArea(area)assert(area == 100) Oups

for circle area = 31415927

Icircn acest exemplu atunci cacircnd uncția primește ca parametrur o instanță a cla-sei Circle va avea uncomportament greșitDeoarece icircn uncția obiectele de tipSquare nu pot substitui obiecte de tipRectangleprincipiul LSP este violat Funcția este

ragilă icircn raport cu ierarhia SquareCircle

Design by ContractDesigur că mulți programatori se vor

simți incon ortabil cu noțiunea de bdquocompor-tamentrdquo care trebuie să e bdquocorectrdquo Cum amputea presupune ceea ce așteaptă utilizato-riiclienții claselor pe care le implementămIcircn acest scop ne vine icircn ajutor tehnicadesignului prin contract (design by con-tract - DBC) Contractul unei metode icirclin ormează pe autorul unei clase clientdespre comportamentele pe care se poatebaza cu siguranță Contractul este spe-ci icat prin declararea precondițiilor și

a postcondiț iilor pentru iecare metodăPrecondițiile trebuie să e adevarate pen-tru ca metoda să se execute Iar icircn inaldupă execuția metodei aceasta garan-tează că postcondițiile sunt adevărateAnumite limbaje precum Eiffel o eră suportdirect pentru precondiții și postcondițiiAcestea trebuie doar declarate iar icircn tim-pul rulării sunt vericate automat Icircn C++sau Java această uncționalitate lipseșteContractele pot i icircn schimb speci icateprin teste unitare (unit test ) Prin testareacomportamentului unei clase testele uni-tare clarică comportamentul unei claseProgramatorii care vor olosi clasele pen-tru care s-au implementat teste unitarepot olosi aceste teste pentru a ști care estecomportamentul pe care icircl o eră claselorclient

ConcluziiPrincipiul LSP este doar o extensie a

principiului Deschis-Icircnchis și icircnseamnă căatunci cacircnd adăugăm o nouă clasă derivatăicircntr-o ierarhie de moștenire trebuie să ne

asigurăm că clasa nou adăugată extindecomportamentul clasei de bază ară a-lmodica

Principiul Inversării Dependenței(Dependency Inversion Principle)

A Modulele de pe nivelurile ierar-hice superioare nu trebuie să depindă demodulele de pe nivelurile ierarhice in e-rioare oate ar trebui să depindă doar demodule abstracte

B Abstractizările nu trebuie sădepindă de detalii Detaliile trebuie sădepindă de abstractizări

Acest principiu enunță aptul că modu-lele de pe nivelul ierarhic superior trebuiesă ie decuplate de cele de pe nivelurileierarhice in erioare Această decuplare serealizează prin introducerea unui nivel deabstractizare icircntre clasele care ormeazănivelul ierarhic superior și cele care or-mează nivelurile ierarhice in erioare Icircn

plus principiul spune și aptul că abstrac-tizarea nu trebuie să depindă de detalii cidetaliile trebuie să depindă de abstractizareAcest principiu este oarte important pen-tru reutilizarea componentelor so twareDe asemenea aplicarea corectă a acestuiprincipiu ace ca icircntreținerea codului să emult mai ușor de realizat

Icircn Fig 6 este prezentată o diagramăde clase organizată pe trei niveluri Ast elclasa PolicyLayer reprezintă nivelul ierar-hic superior ea accesează uncționalitatea

din clasa MechanismLayer a lată peun nivel ierarhic in erior La racircndulei clasa MechanismLayer accesează

uncționalitatea din clasa UtilityLayer carede asemenea se a lă pe un nivel ierarhicin erior Icircn concluzie este evident aptul căicircn diagrama de clase prezentată nivelurilesuperioare depind de nivelurile in eri-oare Acest lucru icircnseamnă că dacă apare omodicare la unul din nivelurile in erioareexistă șanse destul de mari ca modicareasă se propage icircn sus spre nivelurile ierarhicesuperioare Ceea ce icircnseamnă că nivelurilesuperioare mai abstracte depind de nive-lurile in erioare care sunt mai concreteAșadar se icircncalcă principiul inversăriidependenței

Figura 6

Icircn Fig 7 este prezentată aceeași dia-gramă de clase ca și icircnFig 6 dar de aceastădată este respectat principiul inversării

dependenței Ast el iecărui nivel careaccesează uncționalitatea dintr-un nivelierarhic in erior i s-a adăugat o inter ațăcare va i implementată de nivelul ierar-hic in erior Icircn acest el inter ața prin carecele două niveluri comunică este denităicircn nivelul ierarhic superior ast el icircncacirctdependența a ost inversată și anume nive-lul ierarhic in erior depinde de nivelulierarhic superior Modicări ăcute la nive-lurile in erioare nu mai a ectează nivelurilesuperioare ci invers Icircn concluzie dia-grama de clase dinFig 7 respectă principiulinversării dependenței

Figura 7

ConcluziiProgramarea tradițională proce-

durală creează polițe de dependențeicircn care modulele ierarhice superi-

oare depind de detaliile modulelorierarhice in erioare Acestă metodă deprogramare este ine icientă deoarecemodi icari ale detaliilor conduc cătremodi icări și icircn modulele superioareProgramarea orientată obiect inverseazăacest mecanism de dependență ast elicircncacirct atat detaliile cacirct și nivelurile superi-oare depind de abstractizări iar serviciileaparțin deseori clienților

Indi erent de limbajul de programareolosit dacă dependențele sunt inver-

sate atunci designul codului este orientatobiect Dacă dependențele nu sunt inver-sate atunci designul este proceduralPrincipiul dependenței inversate repre-zintă mecanismul undamental de nivelscăzut (low level ) ce stă la baza multorbenecii o erite de programarea orientatăobiect Respectarea acestui principiu este

undamentală pentru crearea de modulereutilizabile Este de asemenea esențialăpentru a scrie cod rezistent la modicariAtacirct timp cacirct abstracțiile și detaliile suntizolate reciproc codul este mult mai ușor

de menținut

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3246

32 nr 25Iulie 2014 | wwwtodaysoftmagro

Principii de design Agilearhitectură

Principiul Segregării Interfeței (TheInterface Segregation Principle)

Clienții nu trebuie să depindă deinter ețe pe care nu le olosesc

Acest principiu pune icircn evidență ap-tul că atunci cacircnd se denește o inter ațătrebuie avut grija ca doar acele metodecare sunt speci ice clientului să ie puseicircn inter ață Dacă icircntr-o inter ață suntadăugate metode care nu au ce căutaacolo atunci clasele care implementeazăinter ața vor trebui să implementeze șiacele metode Spre exemplu dacă se con-sideră inter ața Angajat care are metoda Mănacircncă atunci toate clasele care imple-mentează această inter ața vor trebui săimplementeze și metoda Mănacircncă Ce seicircntacircmplă icircnsă dacă Angajatul este un robot

Inter ețele care conțin metode nespecicese numesc inter ețe poluate sau grase

Icircn Fig 8 este prezentată o diagramă declase care conține inter ațaTimerClient inter ațaDoor și clasaTimedDoor Inter ațaTimerClient trebuie implementată de oriceclasă care are nevoie să intercepteze eve-nimente generate de un imer Inter ațaDoor trebuie să e implementată de oriceclasă care implementează o ușă Avacircnd icircn vedere că a ost nevoie de modelarea unei

uși care se icircnchide automat după un anumitinterval de timp icircnFig 37 este prezentatăo soluție icircn care a ost introdusă clasaTimedDoor derivată din inter ața Door iar pentru a dispune și de uncționalitateadin TimerClient a ost modicată inter ațaDoor ast el icircncacirct să moșteneascaă inter ațaTimerClient Aceasta soluție icircnsă polueazăinter ațaDoor deoarece toate clasele care vor moșteni această inter ața vor trebuisă implementeze și uncționalitatea din

imerClient [4]class Timerpublic

void Register(int timeoutTimerClient client) class TimerClientpublic

virtual void TimeOut()

class Door

publicvirtual void Lock() = 0virtual void Unlock() = 0virtual bool IsDoorOpen() =

0

Figura 8

Separarea inter ețelor se poate realizaprin mecanismul moștenirii multiple IcircnFig 9 se poate observa cum moștenireamultiplă poate olosită pentru a respectaicircn design principiul segregării inter ețelorIcircn acest model inter ațaTimeDoor moștenește din ambele inter ețeDoor șiTimerClient

Figura 9

ConcluziiClasele poluate sau graserdquo conduc

către cuplări greșite pentru clienții lor

Cacircnd un client e ectuează o modi icareasupra unei clase poluate toți ceilalțiclienți ai clasei poluate sunt a ectați Deaceea clienții trebuie să depindă numaide metodele pe care le apelează e ectivAcest lucru poate realizat prin separareainter ețelor poluate icircn mai multe inter ețespecice clienților Fiecare inter ața speci-că unui client va conține numai metodelecare sunt e ectiv apelate de către clientClasele graserdquo pot apoi să moșteneascătoate inter ețele specice clienților și să leimplementeze Acest mecanism decupleazădependența clienților de metode pe care nule apelează niciodată și permite clienților săe independenți unii de alții

Concluzii Agile DesignPrin aplicarea repetată - de la o iterație

la alta a principiilor mai sus enunțate seevită cele trei caracteristici care denesc oarhitectură sofware de slabă calitaterigi-ditatea - sistemul este greu de modi icatpentru că ecare modicare a ectează preamulte părți ale sistemului ragilitatea -

dacă se modică ceva apar tot elul de erorineașteptate și imobilitatea - este dicil să sereutilizeze părți dintr-o aplicație pentru cănu pot separate de aplicația pentru careau ost dezvoltate inițial

Designulagile reprezintă un procescare se bazează pe aplicareacontinuă aprincipiilor agile și a design pattern -urilorast el icircncacirct designul aplicației rămacircne icircnmod constant simplu curat și cacirct se poatede expresiv

Pentru o apro undare a principiilorenunțate recomand cu icircncredere car-tea lui Robert C Martin Agile So twareDevelopment - Principles Patterns andPractices

Bibliograe[1] Robert Martin Agile Sofware DevelopmentPrinciples Patterns and Practices Editura PrenticeHall 2012[2] Gamma et alDesign patterns reading Ma Addison-Wesley 1998[3] Liskov BarbaraData Abstraction and Hierar-

chy SIGPLAN Notices 235 (May 1988)[4] Meyer BertrandObject oriented sofware con-struction 2nd ed upper Saddle River Nj PrenticeHall 1997

Dumitrița Munteanudumitritamunteanuarobscom

Software engineer Arobs

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3346

33wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

iOS 7 blurIntroducere icircn at design

Icircn ultimul an toată lumeamobile a adoptat conceptul de at design e vorba de Android iOS sau Windows ecare dintre sistemecu variațiunile proprii Icircn esența scopul e același o mai bună icircnțelegere a inter eței grace de către utilizator

Odată cu iOS 7 Apple a introdus lat design icircmpreună cucacircteva concepte deuser experience printre care și ideea de ldquoknow

where you arerdquo ast el ca utilizatorii să aibă o mai bună icircnțelegere acontextului icircn care se aă Cel mai bun exemplu esteNoticationCenter care odată deschisblur ează conținutul din spatele săuAcest lucru permite vederea noului conținut peste vechea pagină

ără să blocheze vedereaHome View-ului Un alt exemplu bun ar atunci cacircnd vrem să așăm o alertăbluracirc nd conținutul din spateleei va conduce natural atenția utilizatorului spre mesajul primit

ără a-l scoate icircnsă din contextul icircn care se aa anterior

Cum reușește Apple

Pentru realizarea acestui lucru cei de la Apple lucreazădirect cu GPU-ul acest lucru asiguracircndu-le viteză și calitate Deasemenea le permite să realizeze așa numitulldquolive blurrdquo adicămișcarea elementelor din spate să e redată prinblur Din păcateApple nu urnizează nici un API pentru a realiza acest lucru icircniOS7 SDK probabil din diverse motive de securitate iar să lucrezide la zero cu GPU necesită multe linii de cod și timp Ca să msinceri vrem să implementăm doar o inter ață gracă pentru unecran de alertă nu un joc 3D

SoluțieAici apare icircntrebarea irească cum obținem așa ceva icircn

aplicațiile noastre Există mai multe opțiuni dar icircn acest articolam să prezint doar una aleasă pentru simplitatea și rapiditatea cucare poate implementată Această variantă constă icircn capturareaecranului prezentblur area capturii de imagine și așarea ei caimagine de undal icircn spatele mesajului de alertă creat

Icircncepem prin a crea clasa noastră proprie de alertă unview controller bazat peUIViewController Pentru captura-rea imaginii șiblur area ei avem nevoie de o clasă numităldquoUIImage+ImageEffectshrdquo pe care o vom importa icircncontroller-ulpaginiiimport ldquoUIImage+ImageEffectshrdquo

Icircntr-una dintre metodele deli ecycle alecontrolle-r ului adău-găm următoarele linii și avem deja cea mai simplă modalitate de aobține un undal blurat-(void)viewWillAppear(BOOL)animated UIImage snapshot = [self takeScreenSnapshot]

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3446

34 nr 25Iulie 2014 | wwwtodaysoftmagro

programareiOS 7 blur

UIColor tintColor =[UIColor colorWithWhite02 alpha015]

selfviewbackgroundImage = [snapshot

applyBlurWithRadius8 tintColor tintColor saturationDeltaFactor 18 maskImagenil]

- (UIImage )takeScreenSnapshot UIGraphicsBeginImageContext(selfboundssize) if([self respondsToSelectorselector( drawViewHierarchyInRectafterScreenUpdates)]) [self drawViewHierarchyInRect selfbounds afterScreenUpdatesNO] else [selflayer renderInContext UIGraphicsGetCurrentContext()] UIImage image =

UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() NSData imageData =

UIImageJPEGRepresentation(image 075) image = [UIImage imageWithDataimageData] return image

1 applyBlurWithRadius estenumărul de pixeli luați icircn cal-culul blur- ului Cu cacirct maimare numărul cu atacirct veți aveao imagine mai blurată

2 tintColor este nuanța care va adaugată imaginii proce-sate Icircn exemplul de mai susam optat pentru un tint maiicircntunecat

3 saturationDeltaFactor estenivelul de saturație de culoare

aplicat imaginii procesatemaskImage deși ni l icircnexemplul de mai sus areicircntrebuințări olositoare icircnmomentul icircn care vrem să blu-răm doar o parte din imagineca icircn exemplul de mai jos

Icircn detaliuPentru cei care vor per ormață mai bună sau un alt el deblur

putem arunca o privire icircn interiorul ldquoUIImage+ImageEffectshrdquo șisă acem cacircteva modicăritypedef enum NOBLUR BOXFILTER TENTFILTER BlurType

import UIKit

interface UIImage (ImageEffects)

- (UIImage ) applyLightEffect- (UIImage ) applyExtraLightEffect- (UIImage ) applyDarkEffect- (UIImage ) applyDarkEffectWithTent (CGFloat) ra-dius- (UIImage ) applyTintEffectWithColor(UIColor )tintColor

- (UIImage )applyBlurWithRadius(CGFloat)blurRadius

blurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor (CGFloat)saturationDeltaFactor maskImage(UIImage ) maskImage

end

Printre noile metodele din UIImage+ImageE ectsh senumără și applyDarkE ectWith ent Această variantă a blur-ului utilizează un ltru bazat pe algoritmultent mai rapid decacirctinițialul alrgoritmbox Iar icircn loc de 3 treceri necesare printr-unltru de tipbox icircn cazul algoritmului ldquotent rdquo este necesară o sin-gură trecere

- (UIImage )applyBlurWithRadius(CGFloat)blurRadiusblurType (BlurType) blurType tintColor(UIColor )tintColor saturationDeltaFactor(CGFloat)saturationDeltaFactor maskImage(UIImage )maskImage hellip if (blurType == BOXFILTER) vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffec -tOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectOutBufferampeffectInBuffer NULL 0 0 radius radius 0kvImageEdgeExtend)

vImageBoxConvolve_ARGB8888(ampeffectInBuffer ampeffectOutBuffer NULL 0 0 radius radius 0 kvImageEdgeExtend) elsevImageTentConvolve_ARGB8888(ampeffectInBuffer

ampeffectOutBuffer NULL 0 0 radius radius 0kvImageEdgeExtend) hellip

Icircn acest mod se reduce tim-pul de procesare de la 184 msla 16 ms Pacircnă la urmă vrem oaplicație cu animații și tranziții

cacirct se poate de luente ărătimpi morți de așteptare și saca-dări iar calitatea rezultatului ecomparabilă cu aceea obținutăde Apple icircnNotication Center

Finalizez prin a sugeratotuși olosirea cacirct mai simplă șidoar icircn locurile icircn care credemcă ne oloșesteblur-ul pentru aevita icircngreunarea uncționăriiuide a aplicației

Mihai Fischermihaischergmailcom

iOS developer Densio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3546

35wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Așa cum menţiona Jonathan Bowen icircn cartea sa bdquoGetting Started with alend Open Studio or Data Integrationrdquo de icircndată cea apărut cel de-al doilea calculator integrarea sistemelor a devenit o parte esenţială a muncii echipelor I

Complexitatea sistemelor de astăzi icircmpreună cu ritmul alert icircncare a acerile evoluează evidenţiază nevoia de a avea la icircndemacircnă

un set de unelte care să ne permită executarea rapidă a sarcinilorde integrare De asemenea trebuie să m icircn stare să reacţionămcu promptitudine la oportunităţile de noi a aceri

Experienţa ne-a arătat că de cele mai multe ori noii clienţi vincu cerinţa de a integra icircn ecosistemul acestora produsul pe carenoi icircl o erim Rareori un sistem in ormatic uncţionează izolat icircnpropriul său univers Icircn mai multe racircnduri am observat că succe-sul proiectului propus unui client a depins de capacitatea noastrăde a integra sistemul cu produsele pe care acesta deja le olosea

Procesul despre care vorbim poate icircnsemna sincronizarea adouă baze de date o singură dată sau recurent consumarea unorservicii ndash ie ele servicii web sau de altă natură ndash generarea și

trans erul de șiere icircn di erite ormate etc Așadar observăm căavem de-a ace cu o varietate de modalităţi prin care putem ducela icircndeplinire aceste sarcini acest lucru contribuind la creștereacomplexităţii problemei De asemenea uneori este la latitudineanoastră să decidem modalitatea prin care vom realiza integrareaicircnsă de multe ori clientul are cerinţe specice și icircn legătură cuacest aspect

Atunci cacircnd ne con runtăm cu o ast el de situaţie putem e săconstruim manual inter aţa icircntre sisteme ca o soluţiecustom esă utilizăm untool specializat pe rezolvarea problemelor de inte-grare Un ast el detool este alend Open Studio care vine cu oo ertă interesantă pentru a ne ajuta la rezolvarea sarcinilor noastrede integrare

Un overview al mediului Talend Open Studioalend Open Studio or Data Integration este un mediu de

dezvoltare grac care după cum spune și numele acestuia estespecializat icircn integrarea datelor icircntre sisteme La baza sistemuluiopen source stă mediul Eclipse Alături de crearea soluţiilor deintegrare alend Open Studio cuprinde și mecanismele necesarelivrării acestora ndash job-urile pot rulate atacirct din interiorul mediu-lui cacirct și ca script-uri de sine stătătoare

Pentru modelarea proceselor sistemul utilizează conectoriDezvoltatorii produsului ne o eră peste 800 de ast el de conectoricare ne dau posibilitatea să conectăm cu ușurinţă baze de date

să citim in ormaţii din diverse surse să trans erăm șiere și săe ectuăm operaţii asupra lor De asemenea avem posibilitatea de aconecta componente specializate pentru a deni procese complexede integrare

O bună parte din munca pe care o icircndeplinim cu ajutorul

alend Open Studio este reprezentată de modelarea gracă a pro-ceselor pe care dorim să le denim Icircn tot acest timp plat orma

icircşi ace treaba de zidar icircnbackground generacircnd cod Java Icircn ondecare componentă pe care o utilizăm are asociat un comporta-ment descris prin intermediul codului Java

Avacircnd icircn vedere aptul că acesta este untool grac produsulpoate utilizat atacirct de programatori cacirct și de persoane care nu aucunoștinţe de programare otuși pentru a putea deni anumitecomportamente complexe este nevoie să scriem din cacircnd icircn cacircndcod Java lucru care ne determină să concluzionăm că utilizatoriicare nu cunosc programare se con runtă cu anumite limitări

alend Open Studio este relativ ușor de olosit este o moda-litate rapidă de a modela scenarii de integrare de cele mai multeori reducacircnd timpul de implementare de la săptămacircni sau luni la

zile sau chiar ore icircn uncţie de complexitatea proiectului otușitrebuie să avertizăm cititorii că asemeni multor altor domeniidacă din cauza excesului de zel sau a unui design nepotrivit acemoverengineering riscăm să obţinem o soluţie complexă greu deicircnţeles pentru alţi utilizatori sau chiar inecientă Există și aicinecesitatea respectării unor bune practici care să asigure calitateasoluţiei noastre

Printre alte benecii ale utilizării alend Open Studio trebuiesă remarcăm că acesta este un produsopen source care permiteutilizatorilor să extindă plat orma după nevoie De asemeneautilizacircndu-l crește productivitatea deoarece dezvoltatorii se potconcentra mai mult la denirea procesului decacirct la implementareatehnică a acestuia Ne sunt puse la dispoziţie o mulţime de com-ponente potrivite situaţiilor mai mult sau mai puţin obișnuite cucare putem opera pentru a ne deni procesele Icircn plus comunita-tea utilizatorilor alend este activă și gata să o ere s aturi tehnice

Scenarii de utilizareDupă cum am menționat icircn secțiunea anterioară cele mai

obișnuite scenarii de utilizare a proiectului alend Open Studiosunt următoarele

bull rans er icircntre baze de date Atunci cacircnd sunt create sistemenoi sau cele existente sunt actualizate este nevoie ca datele să emigrate icircntr-o nouă bază de date Aceasta poate să aibă aceeașischemă sau una di erită iar alend Open Studio ne o eră conec-

torii și acțiunile necesare acestui procesbull Schimb de șiere Sarcinile de integrare pot necesita tran-s eruri de date icircn cantități mari Acest lucru se realizează adeseaprin intermediul șierelor Un exemplu de ast el de șier esteclasicul CSV (comma separated values ) De asemenea este

Integrarea datelor icircntre sisteme cuTalend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3646

36 nr 25Iulie 2014 | wwwtodaysoftmagro

programare

posibil ca sistemul care primește ișierul de trans er să aibănevoie de date icircntr-un alt ormat Și acest caz este acoperit decătre Studio indcă ne dă posibilitatea să denim procese caree ectuează trans ormări asupra datelor trans erate Icircn plusavem la dispoziție capabilități de management al șierelor prinoperații cum ar trans erul prin F P sau arhivarea

bull Sincronizare Sistemele care colaborează nu sunt conectateicircntotdeauna la acelașidata repository ceea ce icircnseamnă că anu-mite in ormații pot duplicate icircntr-un ecosistem Icircn consecințăavem nevoie să ne asigurăm că acestea sunt sincronizate peri-odic Acesta este cazul datelor despre clienții unei companiicare pot prezente spre exemplu icircn sistemul de nanțe cel dedistribuție sau icircn plat orma CRM alend Open Studio poate olosit pentru a realiza sincronizarea sistemelor cu ajutorulunor job-uri care automatizează procesul

bull E L Acesta este un acronim pentruExtract Trans ormLoad termeni care descriu un proces de bază pentru sistemeledata warehouse Un ast el de proces extrage date din sistemeoperaționale le trans ormă aplicacircnd reguli sau uncții iar apoi

le icircncarcă icircndata warehouse Din nou alend Open Studio neace viaţa mai ușoară ajutacircndu-ne substanţial la implementarea

acestui tip de proces

ExempluPentru a ilustra ușurinţa utilizării acestei plat orme creăm un

proiect cu un job care trans ormă un șier XML icircntr-un șier CSVModelul grac pentru acest job simplu este ilustrat icircn gura demai jos

Icircn partea stacircngă avem o componentă de tiptFileInputXMLiar icircn partea dreaptă o componentă de tiptFileOutputDelimitedAcestea sunt conectate printr-un conectorMain Icircnainte de a tragecomponenta de intrare icircndesigner am denit un obiectmetadata căruia i-am asociat un șier XML Studio-ul a detectat automatschema documentului și ne-a dat posibilitatea să selectăm cenoduri să e trans erate cătreoutput Prin intermediul conectoru-luiMain alend a trans erat către șierul de ieșire exact structura

pe care am denit-o ără ca noi să scriem vreo linie de cod otce a trebuit să congurăm icircn componenta de ieșire a ost calea șinumele șierului CSV

Bineicircnțeles putem extinde acest job conectacircnd icircn continuarealte componente cum ar cele care lucrează cu conexiuni F Ppentru a trans era șierul nostru către sistemul țintă

ConcluziiIcircn secțiunile anterioare am văzut pe scurt care este contextul

icircn care sunt realizate procesele de integrare ce este alendOpen Studio și care sunt beneciile utilizării acestui produs Deasemenea printr-un mic exemplu am icircncercat să ilustrăm simpli-tatea utilizării Studio-ului rapiditatea implementării job-urilor șisă ne acem o părere despre capacitatea acestei plat orme

Dănuț Chindrișdanutchindriselektrobitcom

Java Developer Electrobit Automotive

Integrarea datelor icircntre sisteme cu Talend Open Studio

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3746

37wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE programare

Icircn ultimele trei numere ale SM am descoperit lumea AOP olosind treistack-uri di erite - NE Unity și PostSharp Dacă ne uitămla aceste ramework-uri cu un ochi critic putem să observăm că PostSharp este un ramework extrem de robust care ace magiaAOP-ului icircn momentul compilării Pe cacircnd Unity sau NE stack inserează toată această uncționalitate laruntime

Run-time vs Build-TimeEste oarte important momentul icircn care această uncționalitate

este injectată deoarece poate să ne a ecteze per ormanța și modulicircn care aplicația noastră uncționează Icircn gracul de mai jos putemsă vedem o listă cu aceste ramework-uri icircn uncție de momentulicircn care AOP este injectat icircn sistem

După cum putem observa icircn diagrama de mai sus cel mairobust ramework și exibil este PostSharp Acesta injectează icircnmomentul compilării tot ce este nevoie icircn cod pentru a puteaadăuga uncționalitatea de care avem nevoie Pe cacircnd un ra-mework ca Unity nu va modica codul generat de compilator iarla runtime va injecta prinreection și alte mecanisme cu această

uncționalitate Din punct de vedere a per ormanței injectarea laruntime a uncționalități are un preț ndash per ormanța

Icircn acest articol vom analiza caracteristicile LinFu- ului Un ramework de AOP este un ramework hibrid o combinație icircntretipul static și dinamic Dar icircnainte să acem acest lucru haideți săne aducem puțin aminte ce este AOP

RecapitulareAOP este o paradigmă de programare care are drept scop prin-

cipal creșterea modularității unei aplicații AOP icircncearcă să atingăacest scop prin permiterea separării aspectelor secante (cross-cutting concerns) ndash utilizacircnd interceptarea di eritelor comenzi saucereri

Icircn ultimele articole am descoperit cum putem utiliza AOPolosind Unity PostSharp și proprietăți NE 45 (RealProxy)Unity ne o eră posibilitatea de a icircnregistra acțiunile care pot executate icircnainte și după o acțiune speci ică Clasa RealProxyeste clasa principală icircn jurul tuturor acestor proprietăți care este

utilizată de către ramework-uri precum Unity pentru a o eri

această proprietateCea mai mare di erență dintre RealProxy și unstack care ne

o eră AOP este din perspectiva proprietăților Utilizarea RealProxyicircn mod direct ne va cere să scriem toată uncționalitatea de careavem nevoie ndash aceasta se poate traduce icircn timp bani și mai multcod care necesită mentenanță (icircn cele din urmă nu dorim să rein- ventăm roata)

Ce este LinFuEste un set delibrării ce ne o eră suport de AOP plus alte

cacircteva uncționalități precum Mai jos găsiți lista cu toate acesteuncționalități (am lăsat denumirile icircn engleză deoarece tradu-

cerea icircn romacircnă suna extrem de ciudat)bull Aspect-Oriented Programming bull Dynamic Proxies bull Late Binding Mixinsbull Universal Event Handlingbull Closures with Lambda Argumentsbull Duck Typingbull Design by Contract

Am putea spune că LinFu este o colecție de uncționalitățide care am avut nevoie mereu icircn NE dar nu le-am avut nicio-dată suportate de către NE stack Din această cauză am apelatla ramework-uri precum LinFu sau Castle (dacă nu ne-am scrispropiile noastre ramework-uri)

Caracteristica cea mai importantă a LinFu este ușurința cucare poate să e icircnvățat Acesta este un ramework extrem de sim-plu care poate să e icircnvățat și integrat doar icircn cacircteva minute icircnaplicația noastră

Deși LinFu are extrem de multe uncționalități noi ne vomconcentra doar asupra celor care sunt legate de AOP Cacirct desprecelelalte uncționalități vă las pe voi să le descoperiți

De unde vine numeleDe unde credeți că vine numele de LinFu Un nume asiatic al

unui programator care a inițiat acest stack Nu

LanguageINdependentFeaturesUnderneath [NE ]La urma urmei LinFu este exact ce spune și numele său Ocolecție deassembl i-uri care extinde uncționalitatea pe care NEo are Această uncționalitate este extinsă olosindlibrări i ără sămodice sintaxa limbajului precum alte ramework-uri de AOP

AOP și LinFu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3846

38 nr 25Iulie 2014 | wwwtodaysoftmagro

programareAOP și LinFu

DynamicProxyDynamicProxy ne ajută să injectăm laruntime cod și

uncționalitate icircn codul nostru ără să modicăm aplicația dejaexistentă De exemplu dacă dorim să injectăm un sistem de trace-ing sau audit ară să m nevoiți să poluăm codul aplicației noastre

LinFu ne permite să interceptăm orice metodă laruntime atacircta timp cacirct este virtuală Din păcate aceasta este o limitare pecare o are LinFu și alte ramework-uri de AOP Metodele pe carele interceptăm trebuie să e metode virtuale

Interceptarea unei metode se poate ace implementacircnd una dincele două inter ețe pe care DynamicProxy ni le pune la dispozițieIInterceptor sau IInvokeWrapperpublic interface IInterceptor object Intercept(InvocationInfo info)

public interface IInvokeWrapper void BeforeInvoke(InvocationInfo info) object DoInvoke(InvocationInfo info) void AfterInvoke(InvocationInfo info

object returnValue)

După cum putem observa din deniția celor doua inter ețeputem doar să interceptăm apelul sau să avem un control directicircnainte de apel după apel sau chiar icircn momentul apelului și săapelăm cu totul altă metodă

Icircn exemplul de mai jos interceptăm metoda Do din clasa Fooși logăm apelul ară să apelăm o altă metodă decacirct cea originalădin clasa Foopublic class Foo public virtual int Do(int a int b) return a+b public class FooInterceptor IInvokeWrapper private Foo _target public FooInterceptor(Foo target) _target = target public void BeforeInvoke(InvocationInfo info) TraceWriteLine(bdquoBefore Do() calledrdquo)

public object DoInvoke(InvocationInfo info) object result = null result = infoTargetMethodInvoke(_targetinfoArguments)

return result

public void AfterInvoke(InvocationInfo infoobject returnValue)

TraceWriteLine(bdquoAfter Do() calledrdquo)

Dacă dorim să apelăm o altă metodă sau să acem ceva spe-cic icircn momentul apelului trebuie să adăugăm cod icircn metodaDoInvoke Putem chiar să apelăm cu totul o altă metodă ărăsă mai apelăm metoda de baza din Foo Acest lucru se poate

ace dacă ștergem linia de cod care ace apelul propriu zis ldquoin oargetMethodInvoke(hellip)rdquo

Clasa InvocationIn o conține toată in ormația de care avemnevoiebull arget (instanța proxy -ului)bull argetMethod (metoda apelată)bull Stack race (stack-ul icircn momentul apelului)

bull Calling Method (metoda apelată)bull ypeArguments (tipul parametrilor)bull Arguments ( valoarea parametrilor)

O altă caracteristică a acestui ramework este constructorulla interceptor care primește ca parametru o re erință la obiectulpropriu zis Acest lucru se icircntacircmplă deoarece LinFu are nevoie deaceastă re erință pentru a putea intercepta apelul și a suprascriemetoda virtuală pe care noi vrem să o interceptăm Pacircnă la urmaLinFu doar redirectează apelurile spre un proxy intern

ot ce ne-a mai rămas de ăcut este să acem legătura icircntre celedouă ndash clasa Foo și interceptor Acest lucru realizacircndu-se icircn elulurmătorProxyFactory factory = new ProxyFactory()Foo foo = new Foo()FooInterceptor fooInterceptor = newFooInterceptor(foo)Foo customFoo = factoryCreateProxyltFoogt(interceptor)

Da codul de mai sus nu arată tocmai oarte rumos dar poateoarte să e oarte ușor pus icircntr-o metodă generică și să nu mai e

nevoie să ne batem capul cu acest setup Odată ce avem o re erințăla customFoo putem să apelăm ără nici o problemă metoda ldquoDordquo

Se poate observa oarte clar di erența majoră icircntre PostSharp șiLinFu PostSharp nu cere olosirea unui proxy deoarece ace totulicircn momentul compilării generacircnd un cod IL care are deja acesthook Pe cacircnd LinFu are nevoie de o congurare din cod

IProxyUn lucru oarte interesant la LinFu este inter ața IProxy și icircn

special proprietatea ldquoInterceptorrdquo Icircn momentul icircn care generămun proxy avem o re erință la această inter ață Folosind proprieta-tea amintită mai sus putem să schimbăm laruntime interceptorul

ără să m nevoiți să generăm un nou proxy sau să schimbăm cevaIProxy proxy = (IProxy) customFooproxyInterceptor = fooInterceptor2

Acest lucru se icircntacircmplă deorece CreateProxy ne returnează oinstanță a obiectului nostru ușor modicată Aceasta implemen-tează inter ața IProxy și extinde clasa noastră (icircn cazul nostruFoo)

Ceea ce se generează de CreateProxy arată asemănator cupublic class FooProxy Foo IProxy hellip public ovverite int Do(int a int b) hellip

hellip

PerformanțăDin punct de vedere a per ormanței LinFu este mult mai rapid

ca Castle sau Unity dar nu se poate compara cu PostSharp LinFueste extrem de olositor icircn momentul icircn care avem oarte multemetode pe care dorim să le controlăm prin intermediul unui AOP ramework

LimităriLinFu poate să o ere suport de AOP doar pentru metodele

virtuale O metodă care nu este marcată ca virtuală sau ace parte

dintr-o clasăsealed nu poate să e controlată

LicențiereAcesta este un ramework sub licența GNU Putem să icircl olosim

și să icircl modicăm ără nici un el de probleme

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 3946

39wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

ConcluzieAcesta este ultimul articol despre AOP Icircn cele patru articole

pe care le-am citit pacircnă acuma despre AOP am descoperit di e-rite mecanisme prin care putem să avem suport AOP icircn aplicațianoastră Fiecare ramework are avantaje și dezavantaje Putemspune că PostSharp este cel mai complet avacircnd cele mai multe

uncționalități și cea mai bună per ormanță doar că acest lucru vine cu un cost PostSharp nu este gratis

Icircn tabelul de mai jos putem să vedem uncționalitățilesuportate de ecare rameworkde AOP

PostSharp LinFu Castle(Sprint NE )

Unity

M e t h o dInterception

Yes Yes Yes Yes

PrivateSealed

Member Interception

Yes Yes No No

E v e n tInterception

Yes No No No

M e m b e rIntroduction

Yes No No No

Radu VunvuleaRaduVunvuleaiquestgroupcom

Senior Software EngineeriQuest

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4046

40 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)

După cum am menționat anterior icircn această lucrare rulăm Klocwork Insight peste nucleul Linux (versiunea 26329) și anali-zăm rezultatele analizei noastre Versiunea Klocwork Insight utilizată pentru această analiză a ost 9206223Figura 3 arată vericatorii Klocwork pe care i-am utilizat pentru a analiza codul sursă CC++ Acestea sunt de apt amilii de vericatoriPrime

sau categoriiPrime deoarece ecare dintre aceste 3 elemente (din gura 3) conține un număr de vericatori individuali

Acești vericatori au ost validați pe Klocwork pentru analizanoastră pentru a identi ica toate problemele semni icative dincodul sursă care este analizat Metricile proiectului raportate deKlocwork după analizarea codului Linux kernel (26329) suntindicate icircn tabelul 1

ABELUL 1

ME RICILE PROIEC ULUI RAPOR A E PEN RU SCA ANUCLEULUI LINUX

Număr total de șiere 13999

Număr total de șiere CC++ analizate 13868

Număr total de șiere de sistem analizate 131

otal linii de cod (Sursă LOC) 4309863

otal linii de comentarii 1358746

Număr total de entități 944835

Număr total de uncții metode 162814

Numărul total al claselor tipurilor 42797

Fig3 Vericările Klocwork pentru codul CC++

Icircn următoarele două secțiuni vom prezenta analiza vulnerabilității și analiza complexității nucleului Linux după e ec-tuarea SCA pe codul Linux kernel

Analiza vulnerabilitățiiAnumiți identi icatori ai Vulnerabilităților și Expunerilor

Comune (CVE) pentru vulnerabilitățile de securitate ain ormațiilor publice pentru numeroase versiuni ale Linux

kernel inclusiv versiunea 26329 sunt prezentați icircn tabelul 2Vulnerabilitățile enumerate icircn tabelul 2 nu sunt icircn nici un cazcomplete ci sunt o submulțime a vulnerabilităților publicate icircnNational Vulnerability Database (NVD) după lansarea versiunii26329 a nucleului Linux Lansarea versiunii 26329 a nucle-ului Linux a ost anunțată icircn ebruarie 2010 Vulnerabilitățileenumerate icircn tabelul 2 au ost publicate icircn NVD icircntre lunile

ebruarie 2010 și iulie 2011 ceea ce constituie perioada noastrăde luare de probe NVD este depozitul guvernului Statelor Unitede date de management al vulnerabilităților bazat pe standardereprezentate prin Security Content Automation Protocol (SCAP)Aceste date permit automatizarea managementului vulnerabilității măsurarea securității și con ormitatea NVD include baze de dateale tabelelor de control securitate de ectesofware legate de secu-ritate congurații greșite nume de produse și metrici de impact(13)

Prin e ectuarea SCA pe versiunea Linux kernel anteriormenționată noi putem identica vulnerabilitățile prezentate icircntabelul 2 Mai mult aceste vulnerabilități identicate olosind SCA

reprezintă aproximativ 10 din toate vulnerabilitățile Linux ker-nel (v26329) raportate icircntre ebruarie 2010 (lansarea versiuniiLinux kernel 26329) și iulie 2011 (s acircrșitul perioadei noastre deprobă) icircn NVD Chiar dacă nu toate vulnerabilitățile publicate icircnNVD care corespund versiunii 26329 a Linux kernel au putut detectate numai prin analiza statică procentul de 10 din pro-bleme pe care SCA a ost icircn stare să le identice după cum aratătabelul 2 include un număr semnicativ de probleme de securitateși calitate Din acest 10 vulnerabilități aproximativ 223 au ostclasicate drept RidicatePrime 443 au ost considerate MediiPrime și333 au ost apreciate drept ScăzutePrime pe Sistemul de Evaluare alVulnerabilităților Comune (CVSS) Acest exercițiu indică cu suc-ces aptul că anumite vulnerabilități (după cum se arată icircn tabelul2) din nucleul Linux (inclusiv versiunea 26329) publicate icircncădin iulie 2011 icircn NVD ar putut detectate mult mai devremedacă s-ar e ectuat mai devreme o analiză statică și o revizuiresacircrguincioasă

Un alt actor important de luat icircn considerare este tipul vulnerabilităților care pot i identi icate prin SCA ipurile de vulnerabilități pe care SCA a reușit să le detecteze icircn experimentulnostru includ buffer overows integer overowsunderowseroareinteger signednessși inițiere memorie necorespunzătoare Acesteasunt cacircteva din vulnerabilitățile care au ost exploatate rec- vent pentru a lansa atacuri malițioase asupra diverselor aplicațiisofware De exemplu anomaliilebuffer overow au o tradiție icircn a

exploatate de către viruși ai computerelor precum virusul Morris(1988) sau mai recent virusul Concker (2008) Merită e ortul dea identica asemenea viruși de timpuriu atunci cacircnd incorporămcod opensource icircn codul patentat de vreme ce experimentul nos-tru demonstrează că SCA are capacitatea de a detecta un număr

programare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4146

41wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE

semnicativ de ast el de viruși și este un actor motivant puternicsă e ectuezi SCA pe codulopensource adoptat

ABELUL II VULNERABILI ĂȚILE LINUX KERNELDE EC A E DE SCA

Dincolo de aptul că a reușit să detecteze aceste vulnerabilitățicunoscute dinainte instrumentul SCA a ost capabil să semnalezeanumite probleme critice din cod care ar putea necesita o inves-tigare suplimentară pentru a evalua veridicitatea lor și gradul icircncare pot exploatate Chiar dacă exploatabilitatea unora dintreaceste vulnerabilități nu poate justicată numai prin analizastatică este icircn interesul oricărui vacircnzător de sofware să rezolveaceste probleme icircnainte ca sofware-ul să e lansat pe piață Acestlucru stabilește importanța e ectuării SCA pe codul sursă pentrua identica și repara anumite probleme de codare de timpuriuspre deosebire de a aștepta comunitateaopensource să identiceși să raporteze aceste probleme deoarece cu cacirct o vulnerabilitatesau un virus pot detectate mai devreme cu atacirct mai iefin este

să le repariPentru a analiza ce componente ale nucleului Linux au mai

mare incidența de vulnerabilități raportate separăm ișierelenucleului icircn șase categorii importante care sunt următoarele (12)

bull Core (Nucleu) Acesta include șierele din subdirectoareleinit block ipc kernel lib mmși virt

bull Drivers (Drivere) Acesta include ișierele din subdirec-toarelecrypto drivers sound security includeacpi include crypto includedrm includemedia includemtd includepcm-cia includerdma includerxrpc includescsi includesound șiincludevide

bull Filesystems (Sisteme șiere) Acesta include șierele din sub-directorul s

bull Networking (Rețea) Acesta include șierele din subdirectoa-

rele netși includenetbull Architecture-specic (Specice arhitecturii) Acesta includeșierele din subdirectoarele arch includexen includemath-emuși includeasm-generic

bull Miscellaneous (Diverse) Acesta include tot restul șierelor

neincluse icircn categoriile de mai sus

Figura 4 Numărul vulnerabilităților per categorie semnica-

tivă a Linux Kernel (v26) publicat icircn NVD (anii 2010- 2011)

O privire rapidă peste NVD arată că cele mai multe vulnerabilități publicate (icircntre anii 2010 și 2011) pentru nucleul

Linux au loc icircn componentele networkingPrime

ale nucleului urmatede componentele driverePrime și lesystemsPrime după cum se poate vedea icircnFigura 4 Acest lucru poate atribuit aptului că gru-pul network care bineicircnțeles are de a ace cu capacitățile denetworking este unul dintre componentele cel mai recventexploatate ale nucleului Linux Acest lucru este compatibil cupropunerea atrăgătoarePrime de a lansa atacuri izolate și de aceeamulțimea network este o țintă obișnuită pentru exploatare ceeace ar putea justica numărul crescut de vulnerabilități care suntraportate

Analiza complexității

De obicei instrumentele SCA pot calcula parametrulcomplexității pentru programele pe care le analizează Pe scurtparametrul complexității măsoară numărul deciziilor care existăicircntr-un program măsoară icircn mod direct numărul căilor indepen-dente liniare prin codul sursă al unui program Cu cacirct există maimulte decizii posibile de luat icircn timpul rulării cu atacirct sunt posibilemai multe direcții de date Institutul Național al Standardelor și

ehnologiei (NIS ) recomandă programatorilor să calculeze com-plexitatea modulelor pe care le dezvoltă și să le separe icircn modulemai mici ori de cacircte ori complexitatea ciclomatică a modululuidepășește 10 Dar icircn anumite circumstanțe poate adecvată lăr-girea restricției și icircngăduirea modulelor cu o complexitate pacircnă la15 dacă este o erită o explicație icircn scris a motivelor pentru carea ost depășită limita (9) Un parametru ridicat de complexitate

ace aproape imposibil ca un programator uman să poată urmăritoate căile posibile iar de aici rezultă probabilitatea crescută caprogramatorul să introducă un de ect nou atunci cacircnd codul estemodicat sau cacircnd se adaugă cod nou Dacă complexitatea ciclo-matică a programului este mai mare de 50 un asemenea programeste considerat ne-testabil și avacircnd un risc oarte mare Studiilearată o corelare icircntre complexitatea ciclomatică a programuluiși mentenabilitatea și testabilitatea sa sugeracircnd că la șierele cucomplexitate mai mare există o probabilitate mai mare de eroriatunci cacircnd se repară se icircmbunătățește sau se reutilizează codulsursă Icircntr-un proiectopensource similar lui Linux cea mai mare

parte a e ortului de dezvoltare este comunicată prin liste de adreseDezvoltatorii sunt icircmprăștiați icircn jurul lumii și prezintă niveluri variate de abilități de dezvoltaresofware De aceea această situațiear putea reprezenta o sarcină provocatoare pentru orice entitatecentrală responsabilă cu coordonarea e orturilor de dezvoltare

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4246

42 nr 25Iulie 2014 | wwwtodaysoftmagro

Securizarea codului Open source (II)programare

Numărul metodelor cu o complexitate mai mare de 20conținute icircn componentele nucleului Linux este ilustrat icircn gura5 Raportul de complexitate medie (Complexitatea maximă ametodelor Numărul total de metode) pentru metodele cu ocomplexitate mai mare de 20 per categorie semnicativă a nucle-ului Linux este ilustrat icircn igura 6 Prima coloană din igura 6reprezintă complexitatea medie pentru icircntregul nucleu Linux(v26329) icircn timp ce restul coloanelor reprezintă complexitateamedie pentru componentele semnicative conținute de nucleulLinux Din gura 6 reiese icircn mod evident aptul că complexitateamedie pentru componentele individuale importante din Linuxkernel este mult mai mare (peste 2x) decacirct complexitatea mediepentru icircntregul Linux kernel O privire rapidă prin NVD arată căcele mai multe vulnerabilități publicate pentru nucleul Linux segăsesc icircn componentele care conțin un număr mare de metodede complexitate crescută care cel mai adesea includ componen-tele driversPrime lesystemsPrime și networkingPrime după cum se aratăicircn Figura 4

Mărimea procentului per categorie semnicativă din nucleul

Linux (versiunea 26) este ilustrată icircn gura 7 Numărul de liniimodicate per categorie importantă din nucleu Linux (versiu-nea 26) este arătat icircn gura 8 Este interesant de observat că icircnciuda aptului că componenta networkingPrime a nucleului Linuxconține un număr mai mic de metode de complexitate ridicată( din gura 5) și mai puține Linii de Cod (LOC) (din gura 7) icircncomparație cu componentele driversPrime și lesystemsPrime o majori-tate a vulnerabilităților publicate icircn NVD au loc icircn componentanetworkingPrime (din gura 4) Motivul pentru aceasta a ost discutaticircn secțiunea anterioară despre analiza vulnerabilității Mai multchiar dacă componenta networkingPrime a nucleului Linux conținemai puține linii de cod complexitatea medie (din g6 ) pentru

componenta networkingPrime

este cea mai ridicată icircn comparație cualte componente ale Linux kernel ceea ce sugerează că compo-nentele ce au o complexitate ridicată tind să conțină un numărmai mare de erori Un alt lucru interesant de notat se re eră lacomponenta architecture-specicPrime a nucleului Linux care are unnumăr mai mic de metode de complexitate ridicată (din g 5) aremai multe linii de cod (din g 7) și a su erit un număr importantde modicări icircn liniile de cod (din g 8) Icircn plus complexitateamedie (din g 6) pentru componenta architecture-specicPrime esteridicată ceea ce sugerează că acele componentele care primesc unnumăr mare de modicări icircn liniile de cod tind să aibă o comple-xitate mai mare

Figura 5 Numărul de metode cu complexitate gt20 per

categorie semnicativă a Linux kernel (v26)

Figura 6 Raportul de complexitate medie (Complexitatea maximă

a metodelor Numărul total al metodelor) pentru metodele cu o com-

plexitate gt20 per categorie semnicativă a Linux kernel (v26)

Figura 7 Mărimea procentajului per categorie semnicativă a Linux kernel (v26)

Icircn general din analiza noastră observăm următoarele tiparebull Probabilitatea ridicată de erori icircn componentele cu o com-plexitate mai mare (din g 4 5 și 6 ) de exemplu componenteledriversPrime lesystemsPrime și architecture-specicPrime

bull Componentele complexe cu un număr mai mare de liniide cod au primit un număr mai mare de modi icări de cod șiactualizări (din g7 și 8) de exemplu componentele driversPrime șiarchitecture-specicPrime

bull Componentele critice cum ar networkingPrime tind să pre-zinte incidențe mai mari de erori raportate (din g 4)

Prin observarea acestor tipare am putea să concentrăm ariade acoperire a SCA asupra acestor componente critice ale coduluiceea ce vom explica icircn secțiunile următoare

Raghudeep Kannavararaghudeepkannavaraintelcom

Security Researcher Softwareand Services GroupIntel USA

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4346

43wwwtodaysoftmagro | nr 25Iulie 2014

TODAY SOFTWARE MAGAZINE diverse

- No mii de buciume și bacircte să le zicirccă de dor răbu ni Mișucu ciudă Cu ciudă numai pentru cei care-l cunoșteau oartebine alt el - pentru un străin ndash ar părut o simplă constatareicircmpărtășită calm dar apăsat cu vocea icircn surdină Evident nuera cazul lui Gogu care privi stupeat spre Mișu nevenindu-i săcreadă că a reușit cineva să-l scoată - pe Mișu - din starea lui

de molcomă icircnțelegere și totală detașare de vacircltoarea lumii din jurul lui Se pare icircnsă că icircntr-un nal imposibilul se produseși vacircltoarea reușise să-l agațe și pe el icircși zise Gogu oarecumicircnciudat

- Buciume bacircte și opinci icircn spinare sublinie Mișu la el demolcom dar puțin mai apăsat de această dată Gogu nu mai putusă se abțină

- Probleme MișuleMișu ridică privirea spre Gogu icirci zacircmbi cald și consimți- Icircs ceva probleme Incredibil ăsta ar icircn stare să-i zacircmbească

și plutonului de execuție gacircndi Gogu și mai puse un lemn pe oc- De natură să te enerveze- No mi-o venit să le zicircc vreo doua așa darsquo mi-o trecut

Numarsquo nu știu cum oi rezolva- Păi ia s-aud și eu poate o scoatem icircmpreună la capăt se o eri

Gogu nu de alta dar icircl s redelea curiozitatea-Apăi să vezi știi că m-o pus Șe ursquo manager de proiect- Știu icirci tăie Gogu vorba toată rma știe ne-ai astenizat pe

toți Noaptea dacă ne trezești ăsta-i primursquo lucru care ne vine icircnminte Văzu ața pro und jignită a lui Mișu și continuă pe un totmai cald Hai spune să vedem care e problema

- u știi că ăsta icirci un proiect di erit- oate proiectele sunt di erite că de-aia le cheamă proiecte

nu se putu Gogu abține- Bine că ești tu deștept nu se lăsă Mișu mai prejos dar cum

subiectul era mult prea important pentru el se decise să ignoreremarcile lui Gogu și să continue Știi ce-am vrut să spun că ațăde proiectele noastre uzuale de outsourcing ăsta - care lanseazăun produs nou ndash are cu totul alte caracteristici alte cerințealte constracircngeri nu avem doar dezvoltare ci și elemente de

marketing Adică e mult mai complex- Auzi dacă iar o iei de la Ana la Caia a și mă zăpăcești cu

complexitatea stakeholderii și-alte alea te rog să cacircnți la altămasă

Fața lui Mișu exprima uluială icircn ormă pură Cum adică săcacircnt Spuse el rar oarte rar icircncercacircnd să cuprindă sensul celor

spuse de Gogu Ce-are a ace una cu altaĂsta nu mai icircnvață rate icircși zise Gogu icircn gacircnd unde-oi crescut la stacircnă Ha-ha-ha se trezi racirczacircnd tare spre totala

stupe acție a lui Mișu Păi chiar că la stacircnă Ha-ha nu se putuopri din racircs Mișu nu pricepea care e motivul racircsului sănătos al luiGogu dar intuia că e ndash cumva ndash vorba de el Așa că icircși icircncrucișăbrațele la piept arătacircnd că așteaptă claricări Pe care le așteptă des-tul de mult lui Gogu luacircndu-i ceva vreme pacircnă să se domolească

- Gata Mișule iartă-mă nu mai ac zi-i mai departeSe dovedi că problema nu era deloc complicată - greșiseră unii

niște materiale de promovare - dar se agravase datorită icircntacircrzieriiicircn rezolvare Abordarea nu excelase icircn diplomație comunicareas-a realizat exclusiv prin e-mailuri iar tonul acestora devenise dince icircn ce mai dur pe măsură ce ping-pong-ul epistolar se prelungiseSe deraiase demult de la problemă ultimele e-mailuri rezu-macircndu-se la amenințări destinate persoanelor sursa discuțiilor șiproblema icircn sine ind deja uitate

- Și-acum vin și te-ntreb pe tine Gogule eu cum rezolv pro-blema asta Că icircntre timp tot restul proiectului a mers icircnainte iarnoi avem lansarea ocială peste trei zile Online-ul a mers strunădar prezentarea live presupune și toate materialele astea Uff ofăel un ofat venit din adacircncul suetului lui de ardelean care nuicircnțelegea cum pot să-ți aducă niște cuvinte atacirctea probleme

- Hi-hi adicătelea tu crezuseși că s-a terminat totul și poțiconsidera proiectul icircnchis Ha-ha se văzuse cu sacii icircn căruță

Măi Mișule ori tu nu știi vorba aceea primele 90 de procente dinproiect se ac icircn 90 din timp iar pentru ultimele 10 procente maiai nevoie de alte 90 de timp ha-ha

- Auzi Gogule n-oi ști-o io pe asta darsquo o știu pe-ailaltă aiade zice că icircmi trebersquo 42 de mușchi să mă icircncrunt 28 să zacircmbesc

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4446

44 nr 25Iulie 2014 | wwwtodaysoftmagro

diverse

darsquo numarsquo 4 să-mi icircntind brațul și să te pocnesc icircn plină gurăGogu se uită rapid la el dar se liniști Mișu era icircn continuare

cu zacircmbetul pe ață Mda cacircnd n-o mai zacircmbi vom avea cu toțiide urcă gacircndi Gogu calculacircndu-și șansele icircn ața unei posibilelocomotive Mișu concluzionacircnd rapid că nu și-ar dori nimenisă-l enerveze vreodată pe colosul ardelean Care colos știe icircnsăsă se joace cu atacircta dezinvoltură cu copiii icircși aduse aminte Gogu vacanța ce abia se terminase Și atunci avu revelația

- Auzi Mișule ții minte cum te-ai jucat săptămacircna trecută de-acastelanul care icircși repară orticațiile icircnainte de atacul inamicului

Ușor surprins de icircntorsătura discuției Mișu icircși reveni repedeși dădu vesel dar și oarte macircndru din cap a aprobare Fuseserăicircmpreună icircn concediu la mare prima ieșire a lui Mișu la soare gre-cesc mare turcoaz și nisip alb strălucitor Intervenise o situație șisoția lui Gogu usese nevoită să rămacircnă acasă iar Gogu nu avusesesuetul să icirci re uze copilului o vacanță la care cel mic visa de lunide zile Așa că icirci propuse lui Mișu să-i icircnsoțească Și ceea ce useseo invitație ăcută mai mult icircntr-o doară devenise o super vacanțăpentru Mișu și copil care s-au distrat ndash icircmpreună ndash incredibil de

bineMișu rememoră secvența cu reparatul orticațiilor icircn nisipul

grecesc și ața i se lumină- Adică zici tu că ce-a mers cu i-tu merge și-aici Păi e

corect sigur c-ar merge stai așa că știu exact ce trebersquo să ac șise icircntoarse spre calculator ignoracircndu-l total pe Gogu

- Mai concret ce-a ăcut Mișu cu -tu Gogu icircl văzu pe Șe ursquocu o secundă icircnainte ca acesta să-și acă cunoscută prezența prinicircntrebarea aruncată șoptit parcă ără a vrea să-l deranjeze pe MișuNu că ăsta ar auzi ceva dacă se a undă el icircntr-ale lui poți să tragicu tunursquo la urechea lui și el te ignoră total remarcă Gogu icircn gacircndapoi continuă cu voce tare

- Ei mă căzneam să-l scot din apă pe copil iar el nu și nucă de-aia merge omursquo la mare să acă baie Și dăi cu vorba bunădă-i cu amenințări s-a ajuns la strigăte (eu) și ignorare completă(el) cuvinte grele (eu) lasrsquo că-i spun eu mamei ce-ai zis (el) cemai război total Și icircn mijlocul luptei numai ce-l aud pe Mișucu calmul ăla de ne scoate pe noi din minți spunacircndu-i copiluluică are nevoie de ajutor la construcția lui mirică din nisip că nuse mai descurcă singur cu nu-ș-ce orticație ori zid de apărarece-o ost Iar al meu iese instant din apă și se apucă de lucruAbia peste vreo cinci minute mi-am revenit și mi-am așezat la loc

alca căzută Evident seara mi-am avut porția de introducere icircnpsihologia copilului viziunea Mișu sleș Bătracircnursquo lui Mișu

-Hmm nu e rea viziunea asta zacircmbi Șe ursquo Presupun că pacircnădeseară avem și porția de Introducere icircn viziune Să mă ții lacurent

sbquoIntroducerea icircn viziunersquo veni icircnsă mult mai tacircrziu respec-

tiv la ședința de icircnchidere a proiectului la vreo două săptămacircnidupă lansarea ocială a noului produs o lansare icirc ncununată desucces și care a adus elicitări icircntregii echipe coordonate de MișuLa ședință Mișu a cerut ecărui membru al echipei să spună trei

lucruri ce crede că a mers bine ce crede că n-a mers bine și icircnnal ce-ar ace alt el dacă ar să ia proiectul de la capătȘefursquo avrut să a e cum s-a rezolvat p roblema cu print-urile eronatedeclanșacircnd sbquoviziunearsquo

- No că n-o ost bai mare Oamenii erau supărați că nu s-oricircnțeles ei pe e-mailuri cine o orsquo vinovat cine ce-o zis și ce-o cerutde unde s-o plecat și pe cine să pedepsim Pe mine Bătracircnursquo meuașa m-o icircnvățat să caut numarsquo care icirci problema și pe aia s-o rezolvNu era problema mea cine ce-o-nceput ci cum or ajunge materi-ale corecte la lansare Așa că am scris un e -mail rumos icircn carei-am rugat să mă ajute să pot să mă țin de data anunțată pentruevenimentul ocial și să icircmi trimită materialele corecte direct lazona expo Ceea ce or și ăcut iar eu le-am mulțumit C-așa m-oicircnvățat Bătracircnursquo zicea el că omursquo mai repede reacționează la ocerere de ajutor decacirct la o indicație

Simona Bonghez PhDsimonabonghezconfuciusro

Speaker trainer and consultantin project management

Owner of Colors in Projects

Gogu și Bătracircnursquo lui Mișu

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4546

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori

8112019 Today Software Magazine N252014

httpslidepdfcomreaderfulltoday-software-magazine-n252014 4646

powered by

sponsori


Recommended