Sunteți pe pagina 1din 56

Nr. 33 Martie 2015 www.todaysoftmag.ro www.todaysoftmag.

com

TSM

T O D A Y
S O F T WA R E
MAG A Z I NE

spozitivele mobile

di
Realitatea virtuala mbuntit pe
Java Chronicle n aciune

Analiza orientat spre


tehnologiile viitoare
Interviu cu Jon Shieber Senior Editor TechCrunch
Apache Cassandra, Primii Pai

Importana realizrii de prototipuri
Appium - testare automat cross-platform
pentru dispozitive mobile
Date de tip spaial n SQL Server

Quality Assurance n Agile


Sisteme de mesagerie
performante Apache Kafka
O introducere i tuning-ul
Hadoop MapReduce
Usable Software Design
Abordare simpl a riscului n Scrum
Dezvoltarea aplicatiilor
securizate n Java

6
Interviu cu Jonathan Shieber,
senior editor la
TechCrunch i CrunchBase
Ovidiu Man

7
Lansarea Different Angle primul Cluster de IT & C
din Bucureti
Ovidiu Man

8
De ce s vii la
Startup Weekend Cluj 2015?
Cristina Juc

10
MVP Academy prezint cele 13
startup-uri admise n
programul de pre-accelerare
Irina Scarlat

12
Alt-tester la Mobile
World Congress 2015
Simina Rendler

15
Realitatea virtual mbuntit
pe dispozitivele mobile
Alexandru Fediuc i Virgil Andreies

19
Introducerea i tuning-ul
Hadoop MapReduce
Tudor Lpuan

22
Sisteme de mesagerie
performante Apache Kafka
Tiberiu Nagy

25
Date de tip spaial n SQL Server
Diana Muntea

28
Usable
Software
Design
Alexandru Bolboac

31
Quality
Assurance
n Agile
Vasile Selegean

35
Dezvoltarea aplicaiilor
securizate n Java
Silviu Dumitrescu i Diana Blan

38
Abordare simpl
a riscului
n Scrum
Sebastian Boti

42
Importana realizrii
de prototipuri
Ctlin Timofti

44
Java Chronicle
n aciune
Vasile Mihali

46
Apache Cassandra,
Primii Pai
Sergiu Indrie

49
Appium - testare automat cross-platform
pentru dispozitive mobile
Vasile Pop

46
Analiza pentru tehnologiile viitoare
Ioana Armean

editorial

Ovidiu Man

ovidiu.matan@todaysoftmag.com
Editor-in-chief
Today Software Magazine

ntr-una din serile trecute, ncurajai de atmosfera relaxat, eu i cu un prieten


ne-am permis s abordm problema relaiei dintre echipele de programatori i
de testeri dintr-o perspectiv filozofico-religioas. Opoziia tester-programator,
care-l plaseaz pe programator n postura de creator, iar pe cel de tester n postura de
chiibuar venic n cutare de defecte i animat de a distruge ceea ce a creat cu atta
pasiune programatorul, poate fi dizolvat doar dup ce fiecare parte i las orgoliul la o
parte i nu se mai crede nger i respectiv, demon. Ne-a fost tare greu s ne debarasm
de ipostazele acestea ! Soluia a venit de la filozofia oriental, care l pune pe fiecare
ntr-o poziie avantajoas: antagonismul programator-tester este asemenea principiilor
Ying-Yang, adic un sistem a crui valoare este mai mare dect cea a componentelor
sale. Dar s prsim lumea ideilor i s ne ntoarcem n meandrele concretului, adic la
evenimentele acestei primveri.
Doresc s menionez dou dintre ele care au avut loc recent. Este vorba de ..even
mammoths can be Agile, singurul eveniment local ce strnge comunitatea local de
management. TSM a fost notat i de aceast dat la seciunea organizatori. Contribuia
noastr a fost implicarea n publicarea n format tiprit a tuturor povetilor lui Gogu
i care au aprut n revist n ultimii trei ani. A fost un proiect inedit i ne bucurm s
publicm astfel cea de-a doua carte TSM. Al doilea eveniment, la care TSM a participat
ca partener iar subsemnatul ca moderator al unui track este Cluj Innovation Days 2015.
Acesta a crescut mult n ultimii ani, mutndu-i atenia din zona politic spre dezvoltarea de produse. Tema aleas pentru aceast ediie este transferul tehnologic. Am
avut ocazia s vedem prezentri interesante din zona cercetrii, inovaiei, a procesului
de patentare, a modalitii de a iei pe bursa de valori. Important de semnlat a fost i
Internet of Things, un workshop susinut de Google.
Trecem n revist o parte din articolele acestui numr. ncepem cu un scurt interviu acordat revistei de ctre Jonathan Shieber, senior editor la TechCrunch cu care am
avut ocazia s discutm n cadrul unui workshop organizat la Cluj. Viziunea sa asupra startup-urilor este scoaterea n eviden a esenialului, a factorului de difereniere.
Continum cu o scurt prezentare a Different Angle, primul Cluster de IT & C din
Bucureti. Startup Weekend este un eveniment la care toi cei ce doresc dezvoltarea
unui produs ar trebui s participe, publicm n acest numr o serie de sfaturi de la cei
ce s-au clasat primii la ultimele ediii. Mobile World Congress este unul dintre cele
mai mari evenimente de IT din Europa de unde colaboratori ai revistei au venit cu
nouti i impresii. Seria de articole tehnice ncepe cu Realitatea virtual mbuntit
pe dispozitivele mobile, ce prezint principalele framework-uri care ne ajut n crearea de aplicaii destinate realitii augmentate. Tehnologiile cloud sunt reprezentate
printr-o serie de articole n acest numr: Introducerea i tuning-ul Hadoop MapReduce,
Sisteme de mesagerie performante Apache Kafka, Date de tip spaial n SQL Server,
Java Chronicle n aciune i Apache Cassandra, Primii Pai. Dualitatea cu zona de testare
este pstrat prin: Appium - testare automat cross-platform pentru dispozitive mobile
i Quality Assurance n Agile. ncheiem ntr-un ton optimist cu un articol interesant ce
investigheaz viitorul tehnologiei: Analiza pentru tehnologiile viitoare.
V dorim o lectur plcut !!!

Ovidiu Man

Fondator al Today Software Magazine

nr. 33/2015 | www.todaysoftmag.ro

Redacia Today Software Magazine


Fondator / Editor in chief: Ovidiu Man
ovidiu.matan@todaysoftmag.com
Graphic designer: Dan Hdru
dan.hadarau@todaysoftmag.com
Copyright/Corector: Emilia Toma
emilia.toma@todaysoftmag.com

Lista autorilor
Alexandru Bolboac

Silviu Dumitrescu

Agile Coach and Trainer, with a


focus on technical practices
@Mozaic Works

Java Line Manager


@ Accesa

Alexandru Fediuc

Simina Rendler

Associate IT Consultant
@ msg systems Romnia

Software Tester
@ Altom Consulting

Ctlin Timofti

Tiberiu Nagy

UX Designer
@ SDL

Senior developer
@ Betfair

Cristina Juc

Tudor Lpuan

Organizatoare
@ Startup Weekend Cluj

Java & Big Data developer


@ Telenav

Diana Blan

Vasile Mihali

Java developer
@ Accesa

Senior Software Engineer


@ Arobs

Diana Muntea

Vasile Pop

Software Developer
@ Yardi Romnia

Software Engineer
@ Intel Romnia

Ioana Armean

Vasile Selegean

alex.bolboaca@mozaicworks.com

alexandru.fediuc@msg-systems.com

silviu.dumitrescu@accesa.eu

simina.rendler@altom.ro

Traductor: Roxana Elena


roxana.elena@todaysoftmag.com
Editor startups: Mircea Vdan
mircea.vadan@todaysoftmag.com

ctimofti@sdl.com

tiberiu.nagy@betfair.com

Reviewer: Tavi Bolog


tavi.bolog@todaysoftmag.com
Contabil : Delia Coman
delia.coman@todaysoftmag.com

cristinajuc@gmail.com

tudor.lapusan@telenav.com

Tipar realizat de Daisler Print House


Produs de

Today Software Solutions SRL


str. Plopilor, nr. 75/77
Cluj-Napoca, Cluj, Romania
contact@todaysoftmag.com

www.todaysoftmag.ro
www.facebook.com/todaysoftmag
twitter.com/todaysoftmag

Diana.Balan@accesa.eu

diana.muntea@yardi.com

vasile.mihali@arobs.com

vasile.pop@intel.com

ISSN 2284 6352


ioanaa@imprezzio.com
Business Analyst
@ Imprezzio Global

Reproducerea parial sau total a articolelor


din revista Today Software Magazine
fr acordul redaciei este strict interzis.

QA Officer
@ ISDC

Sebastian Boti

Virgil Andreies

Delivery Manager
@ Endava

Associate IT Consultant
@ msg systems Romnia

Sebastian.Botis@endava.com

Copyright Today Software Magazine

vasile.selegean@isdc.eu

virgil.andreies@msg-systems.com

Sergiu Indrie

sergiu-mircea.indrie@hp.com
Software Engineer
@ HP

www.todaysoftmag.ro
www.todaysoftmag.com

www.todaysoftmag.ro | nr. 33/martie, 2015

business

Interviu cu Jonathan Shieber, senior editor


la TechCrunch i CrunchBase

m avut ocazia s povestim cu Jonathan Shieber n cadrul unui workshop organizat n Cluj la nceputul luni martie. Cei din
zona startup-urilor, interesai s i exerseze pitch-ul, au avut ocazia s o fac i s primeasc sfaturi direct de la acesta. Aa
cum ne-am ateptat, nu exist o reet a succesului dar este important s se aib n vedere esenialul i factorii de difereniere
a produsului fie c vorbim de o prezentare sau de publicarea unui articol n TechCrunch. n continuare v prezentm un scurt interviu cu Jon despre tendinele actuale.
Apple Watch va fi disponibil n curnd;
care este perspectiva ta asupra evoluiei
sale, dac ne gndim la limitrile sale
actuale precum bateria de o zi, dependena
de un iPhone, noile versiuni care l vor face
depit versus ceasurile clasice?
[Jon] Chiar nu sunt persoana cea mai
potrivit pentru a formula o prere n legtur cu iWatch de la Apple. Nu este punctul
meu forte. Dar critica mpotriva iWatch
care spune c este ceva inutil mi se pare
corect. Nu vd o aplicaie killer care m-ar
putea convinge s mi iau unul, dar aceasta
a fost i critica iniial mpotriva tabletei.
De fiecare dat cnd Apple lanseaz un
nou dispozitiv n ecosistem, oamenii pun
la ndoial utilitatea sa, i de fiecare dat
acesta devine, n cele din urm, standardul
implicit de aur n categoria sa. Acesta este
unul dintre acele cazuri n care este mai Dac exist reporteri pe care i respectai,
bine s ateptm i s vedem.
lsai-le cteva rnduri i artai-le asta.
Dac oamenii observ cum ne facem
Drept redactor ef la TechCrunch, i se datoria, atunci este mai probabil ca i noi
trimit nouti, iar interesul pentru aceasta s observm ceea ce fac ei.
este foarte mare. Ce sfat ai da unei persoane
care are un startup i dorete s publice un
Este TechCrunch implicat activ ntr-un
articol n TechCrunch? Vreun eveniment accelerator startup prin CrunchBase?
important la care ar trebui s participe?
[Jon] TechCrunch nu este afiliat la
[Jon] Am atins acest subiect n cadrul niciun accelerator sau incubator. Exist
discuiilor la masa rotund. Fii concii, un fond iniiat de ctre fondatorul
descriei punctul dureros pe care l rezolv TechCrunch, Michael Arrington, numit
tehnologia companiei, menionai nou- CrunchFund, dar nu sunt sigur care
tatea ntr-o propoziie, vorbii despre este relaia dintre acel fond de investiii
dimensiunea potenial a oportunitii i TechCrunch (dintr-o perspectiv
de pia i cercetai cine este reporterul instituional).
potrivit pe care s l contactai. Odat
ce un antreprenor identific reporterii
potrivii pentru tirile pe care le anun, ar
trebui s fie struitor n contactarea acelor persoane. ncepei procesul din timp.

nr. 33/martie, 2015 | www.todaysoftmag.ro

Care este opinia ta sincer n legtur


cu startup-urile din Romnia?
[Jon] Talentul este abundent n
Romnia. Am ntlnit mai muli antreprenori pasionai care caut s nfptuiasc
idei interesante, dar ecosistemul este destul de tnr n Romnia i foarte imatur.
Exist o nevoie clar de mai mult capital i
mai mult talent operaional cu experien
n dezvoltarea afacerilor.

Ovidiu Man

ovidiu.matan@todaysoftmag.com
Editor-in-chief
Today Software Magazine

TODAY SOFTWARE MAGAZINE

eveniment

Lansarea Different Angle


- primul Cluster de IT & C din Bucureti

6 martie 2015, Sky Tower, Bucureti - Lansarea oficial a primului Cluster de IT&C din Bucureti, Different Angle, coincide i
cu anunarea primului domeniu de interes comun promovat de membrii noii organizaii: Smart Cities. Pornind de la premisa
c oraele moderne, inteligente sunt capabile s asigure un mediu confortabil i sustenabil pentru locuitorii lor prin utilizarea
eficient a tehnologiei disponibile, Cluster-ul Different Angle a invitat la evenimentul de lansare trei veritabili ambasadori ai conceptului de Smart Cities.
Astfel, evenimentul beneficiaz de prezena Prof. dr. Sorin
Coofan de la Universitatea Tehnic din Delft, Olanda; Chrysses
Nicolaides - Fondator al Clusterului Smart Cities Mediterranean
i Giora Levi - CEO, Alvarion.
Studiile de caz prezentate de acetia urmresc implementri
concrete ale principiilor de baz Smart City n domenii precum:
modalitile optime de transfer de cunotine, resurse i
experien ntre furnizorii de soluii i beneficiarii mediilor
urbane;
utilizarea reelelor wireless ca fundament al dezvoltrii
oraelor inteligente;
capacitatea de aciune a Cluster-elor IT&C n context
european.
Iniiat de cele unsprezece companii membre firme de
consultan i IT&C cu mai mult de cincisprezece ani de
experien pe pia, Cluster-ul Different Angle i propune s
regndeasc i s dinamizeze formulele tipice de colaborare.
Obiectivele pe termen mediu i lung ale Cluster-ului Different
Angle constau n: eficientizarea potenialului local de IT&C,
transferul de knowledge ntre mediul academic i mediul privat,
reducerea deficitului de for de munc specializat n domeniul
IT&C din Bucureti.
Cluster-ul Different Angle are n alctuire urmtoarele companii: Econo-heat, eSolutions Grup, Evolva Trend Consultant,
Gemini Solutions, GreenTree Applications, Lasper Human
Development, Nemetschek Romnia Sales&Support, Power Net
Consulting, Qualitance, RezolvIT, Tremend.

Ovidiu Man

ovidiu.matan@todaysoftmag.com
Editor-in-chief
Today Software Magazine

www.todaysoftmag.ro | nr. 33/martie, 2015

antreprenoriat

De ce s vii la Startup Weekend Cluj 2015?

tartup Weekend este o micare global care reunete oameni cu idei, aspiraii, aparinnd unor medii diferite, reunii de dorina
de a se ajuta reciproc pentru atingerea unui scop comun. Evenimentele Startup Weekend ajut oamenii s-i dezvolte ncrederea
n potenialul lor antreprenorial i s vad cum ideile lor prind via aproape ntr-o clipit. De asemenea, creeaz oportunitatea
de a oferi mentorat de la antreprenorii care au reuit deja i se afl acolo pentru a ajuta i sftui echipele participante.
mai veche, de a crea un obicei din faptul
c i ari aprecierea pentru oamenii din
jurul tu, pentru cine sunt i pentru ceea
ce fac pentru tine n fiecare zi. Eu dobndisem acest obicei, i-l foloseam n relaiile
cu civa oameni foarte apropiai mie, ns
mi doream s gsesc o modalitate de-a
face uz de tehnologie pentru a putea aduce
aceast idee la un alt nivel. Ideile noastre
s-au suprapus, i astfel a aprut ZenQ.
Cum te-ai gndit la idee/concept?
Zornitsa Tomova (ZenQ)
Ideea s-a nscut n februarie 2014,
- Winner at SWCluj 2014
ntr-o dup amiaz cu soare, pe o banc
din faa Cluj Cowork, unde lucram n acea n ce stadiu v aflai n acest moment?
perioad mpreun cu Mircea, co-fondator
Dup SWCluj am avut nevoie s ne
ZenQ . El mi-a povestit atunci despre ideea dm seama cum ar funciona Employee
lui de a crea o aplicatie unde fiecare are un Engagement n viaa real, i dac aceast
profil de personalitate, creat de ctre prie- unealt pe care am gndit-o n cadrul evetenii si, pe care l poate folosi pentru a-i nimentului ar putea avea un impact real,
descoperi punctele forte, pentru a cuta un dar i modul n care ar influena implicarea.
job sau pentru a ctiga ncrederea oame- Se pare c rspunsul e Da, ns noi aveam
nilor care nu te cunosc personal. n acel nevoie de o cercetare car s confirme acest
moment mi-am amintit de o idee de-a mea lucru. La momentul actual lucrm asupra
Ce-a de-a patra ediie Startup Weekend
Cluj va avea loc anul acesta ntre 24 i 26
aprilie. Am putea s i oferim o mulime
de motive pentru care merit s participi i
s ii testezi ideea, dar am decis n schimb
s le ntrebm pe ctigtoarele ediiei
anterioare. Pentru aceasta, le-am provocat s ne rspund la cteva ntrebri. Iat
cteva dintre rspunsurile lor:

Young spirit
Mature organization
A shared vision
Join our journey!
www.fortech.ro

nr. 33/martie, 2015 | www.todaysoftmag.ro

acestui aspect. Ne-a luat foarte mult timp,


pentru c Engagement-ul este un domeniu
relativ nou, respectiv, cercetrile nc nu ne
pot oferi rspunsuri clare.
A n ton i a O n a c a ( E n g a g e m e n t
Management)
- Winner at SWCluj 2014

3. Numete unele dintre cele mai mari


greeli pe care le-ai fcut n startup-ul
tu pn acum.

Nu m-am micat suficient de repede,


nu am pstrat legtura cu toi oamenii
minunai pe care i-am cunoscut n timpul
evenimentului i faptul c n-am profitat de
toate oportunitile care mi-au ieit n cale.
Mara Steiu (Teentrepreneur)
- Winner at SWCluj 2014

TODAY SOFTWARE MAGAZINE

n prezent lucrezi mpreun cu oamenii


pe care i-ai cunoscut la SWCluj?

gndul c eti deja ctigtor. n felul acesta


vei putea avea parte i de distracie.
Dac e s vorbim despre echipa actuZornitsa Tomova (ZenQ)
al, rspunsul este nu. ns dac e s
- Winner at SW 2014
considerm mentorii renumii i inspiratori pe care am avut ocazia s-i cunoatem Care este cea mai memorabil
atunci, rspunsul este da.
experien pe care ai trit-o la SWCluj?
Mara Steiu (Teentrepreneur)
ocul de-a cunoate i de a interaciona
- Winner at SWCluj 2014
cu toi acei oameni minunai, ntr-o perioad de timp foarte scurt, n timp ce
Dac ar fi s vii la ediia de anul acesta, aveam de lucru la proiect!
ce-ai face diferit fa de anul trecut? Ce
Mara Steiu (Teentrepreneur) - Winner
sfat ai putea oferi participanilor de anul at SWCluj 2014

finalul lunii martie este valabil oferta


Early Bird. Poi i tu s fii ctigtorul
ediiei din acest an, tot ce trebuie s faci
este s i cumperi un bilet i s vii cu o
idee. Poate anul viitor tu vei fi cel cruia i
vom lua un interviu?

acesta?

Nu a face nimic diferit. M consider


Pentru a citi interviurile complete, poi
norocoas pentru felul n care au decurs intra pe blogul Startup Weekend Cluj:
lucrurile. Singurul sfat pe care l-a oferi cluj.startupweekend.org/blog/
este acesta: du-te la Startup Weekend nu
doar pentru ca s te distrezi. Mergi acolo cu
Este de menionat faptul c pn la

Cristina Juc

cristinajuc@gmail.com
Organizatoare
@ Startup Weekend Cluj

Our core competencies include:

Product
Strategy

Product
Development

Product
Support

3Pillar Global, a product development partner creating software that accelerates


speed to market in a content rich world, increasingly connected world.
Our oerings are business focused, they drive real, tangible value.

www.3pillarglobal.com

www.todaysoftmag.ro | nr. 33/martie, 2015

antreprenoriat

MVP Academy prezint cele 13 startup-uri admise n


programul de pre-accelerare

ucureti, 18 martie 2015 13 startup-uri tech cu potenial la scar global au fost selecionate pentru a participa la cea de a
doua ediie a programului de preaccelerare MVP Academy. n perioada 23 martie 14 mai, acestea vor lucra la dezvoltarea
produselor i vor forma conexiuni valoroase n industrie participnd la workshop-uri practice, sesiuni de mentorat i la alte
activiti specifice. Lista complet a echipelor finaliste este disponibil online pe site-ul programului http://bit.ly/MVPClassof2015.
Cele 13 echipe finaliste ale programului de preaccelerare MVP
Academy dezvolt produse n domenii precum securitate, comer
online, comer mobile, analytics sau fashion tech i s-au remarcat
prin experiena lor. Astfel, majoritatea startup-urilor au nfiinat
anterior alte companii sau sunt formate din profesioniti care au
dezvoltat diferite iniiative n tehnologie de-a lungul timpului.
Selecia finalitilor a fost realizat lund n considerare echipa
i experiena acesteia, dimensiunea i tendinele actuale ale pieei,
validarea utilizatorilor i costul de achiziie, traciunea iniial,
scalabilitatea i fezabilitatea produsului. Din juriu au fcut parte
Bogdan Iordache (Investment Manager, 3TS Capital Partners &
Board Member, How to Web & TechHub Bucharest), Cosmin
Ochior (Business Development Manager, hub:raum, care a evaluat startup-urile din partea hub:raum i Telekom Romania) i
Alex Negrea (Co-Fondator, docTrackr).
Startup-urile care vor participa la cea de-a doua ediie a programului de preaccelerare MVP Academy sunt:
1. Accelerole: software de management care ajut freeancer-ii
i ageniile s i structureze sistemele de tarifare orar i s i
gestioneze mai bine procesele interne;
2. Catwalk15: aplicaie mobil care ajut utilizatorii s

10

nr. 33/martie, 2015 | www.todaysoftmag.ro

primeasc sfaturi vestimentare i s se inspire;


3. Clepsisoft CyberFog: soluie proactiv de securitate care
deviaz atacurile cibernetice;
4. CloudHero: platform de management i raportare care
permite companiilor i persoanelor s i gestioneze mai bine
infrastructura digital i s controleze costurile;
5. Conversion Network: software de marketing integrat care
permite marketer-ilor afiliai s i dezvolte i scaleze afacerile
fr efort, cu rezultate mai bune;
6. InnerTrends: soluie de web analitics care ajut aplicaiile
web i site-urile de ecommerce s monitorizeze activitatea
clienilor.
7. MyDog.xyz: platform care pune n legtur stpnii de
cini cu furnizorii de servicii i proprietarii de parcuri canine;
8. SafeDrive: aplicaie mobil care mbuntete sigurana
traficului rspltind oferii care nu utilizeaz telefonul la volan
cu puncte care pot fi apoi convertite n produse i servicii;
9. Seeds: platform integrat pentru realizarea de chestionare,
adresat celor care gestioneaz un volum mare de date;
10. Squady: platform care ajut utilizatorii s descopere,
s creeze i s se alture activitilor sociale ntr-o manier

TODAY SOFTWARE MAGAZINE


simpl i intuitiv;
11. Swapr: aplicaie mobil care ajut femeile s fac schimb
de haine n funcie de locaie i preferinele vestimentare ale
acestora;
12. SwipeTapSell: aplicaie care mbuntete experiena
cumprtorilor de pe dispozitive mobile i tablete, ajutnd astfel magazinele online s interacioneze cu clienii lor i s i
mreasc rata de conversie;
13. Unloq: software care propune o nou modalitate de
autentificare i autorizare a tranzaciilor care nlocuiete
parolele cu dispozitive, oferind astfel utilizatorilor mai mult
siguran, simplu i gratuit;

s demareze discuii pentru a ncheia noi runde de finanare sau


parteneriate strategice.
MVP Academy este un program realizat n parteneriat cu
Telekom Romania & Bitdefender, cu sprijinul CyberGhost,
Raiffeisen Bank, hub:raum i Microsoft. Mediatizarea programului este asigurat de F6S, Netocratic, CrunchBase, Entrepreneur
Global, Digjitale, Entrepreneur.bg, Newtrend.bg, Startup
Date, Traction Tribe, Times New Roman, Hotnews, Capital,
Evenimentul Zilei, Romnia Liber, Academia Caavencu, Yoda.
ro, Incont.ro, Wall-Street.ro, Forbes Romnia, Business24, Ziare.
com, Business Review, Computer Games, Comunicaii Mobile,
Computer World, PC World, Agora, Business Cover, Business
Woman, Zelist.ro, Comunicatedepresa.ro, Trade Ads Interactive,
MVP Academy este un program organizat n parteneriat Gadget Trends, Games Arena, Gadget Talk, Softlead, Today
cu Telekom Romnia & Bitdefender, cu sprijinul CyberGhost, Software Magazine, startups.ro i IQAds.
Raiffeisen Bank, hub:raum i Microsoft. n perioada 23 martie
14 mai, cele 13 echipe finaliste vor trece printr-un proces de
MVP Academy se bucur de susinerea comunitilor
preaccelerare complex, adaptat pentru a corespunde nevoilor lor partenere Romanian Startups, Romanian Game Developers
specifice, vor lucra la dezvoltarea produsului i vor nva cum Association (RGDA), Softbinator, ANIS, Cluj Hub, Cluj Co-Work,
s acceseze oportunitile existente pe piaa global. Toate aces- Professional Gamers League, Tabra de testare, comunitatea frontea participnd la workshop-uri practice, sesiuni de mentorat i tend din Romnia, Akcees, Startup Weekend Romnia, Startup
coaching 1 la 1, pitching practice i alte activiti dedicate.
Weekend Trgu Mure, Startup Weekend Cluj, Girls in Tech
Pe parcursul celor apte sptmni ale programului, startup- Romnia i Girls Who Code.
urile vor avea ocazia s dezvolte conexiuni valoroase cu mentori
cunoscui i lideri din industrie, printre care se numr Jon
Bradford (Managing Director, Techstars UK), Mike Butcher
Irina Scarlat
irina.scarlat@howtoweb.co
(Senior Editor, TechCrunch Europe), Alex Barrera (Co-Fondator,
Tech.eu & Press42), Ivan Brezak Brkan (Editor, Netokracija),
PR Manager
@ How to Web &
Olaf Lausen (Chief of CEO Staff & Business Development
TechHub Bucharest
Director, Telekom Romania) sau Florin Talpe (CEO i Fondator,
Bitdefender). Lista complet a mentorilor este disponibil online
la http://bit.ly/MVPmentors, iar aceasta va fi actualizat periodic
n funcie de nevoile specifice ale echipelor participante.
n plus, echipele vor discuta cu reprezentani ai unora dintre
cele mai cunoscute programe de accelerare la nivel internaional
(Techstars, Startupbootcamp, Startup Wiseguys, Ignite 100 sau
LAUNCHub), cu investitori de tip angel i fonduri de investiii
early stage active n regiune (Early Bird, 3TS Capital Partners).
Programul de preaccelerare MVP Academy se va ncheia joi,
14 mai, cu Demo Day, eveniment n cadrul cruia startup-urile
participante i vor prezenta produsele i progresul nregistrat
n faa audienei formate din investitori i lideri ai comunitii
profesionitilor n tehnologie la nivel regional, avnd astfel ocazia

www.todaysoftmag.ro | nr. 33/martie, 2015

11

eveniment

Alt-tester la Mobile World Congress 2015

obile World Congress este evenimentul de anvergur al industriei tehnologiilor mobile. Un trg uria, lansri mult
ateptate, conferine i seminarii extraordinare, networking intens. Ce face la un asemenea eveniment o companie specializat n servicii de testare i, mai ales, de ce duce de mnu un roboel?

La unul dintre standurile din pavilionul


Poloniei participanii la MWC15 puteau
ctiga premii rspunznd la ntrebri din
domeniul tehnologiei informaiilor. n ce
an a avut loc prima ediie a CeBIT? a fost
una dintre ntrebrile la care am greit,
presupunnd c un eveniment de acest tip
nu poate fi mai vechi de 1987. Rspunsul
corect este: CeBIT se desfoar din 1970.
i atunci m-am ntors la pagina web a
evenimentului la care m aflam ca s descopr c nici Mobile World Congress nu
e un eveniment chiar tnr, ci dinuie
nc din 1987. i uitndu-m n jur, constatam c nici mic nu este, din ce vedeam
ca numr de participani n staiile de
metrou din Barcelona -muli purtam
ostentativ ecusoanele, n pofida recomandrilor de securitate-, n locurile din Fira
Gran Via amenajate pentru socializare
i, n definitiv, n orice spaiu dedicat sau
folosit pentru a ajunge la trg. Mulimea
aceasta de oameni a dat n statisticile organizatorilor un numr de peste 92 000 de
participani din peste 200 de ri.

De ce att interes? Prin lentilele mele de


tester/expozant/utilizator-de-smartphone,
am zrit cteva motive pentru care cei care
lucreaz n IT ar vrea s mearg la MWC,
dincolo de faptul c e n Barcelona lui
Gaud, n inutul tapas-urilor i al sangriei.
n primul rnd, Mobile World Congress
este locul lansrilor spectaculoase de

12

tehnologii, servicii i echipamente mobile.


Samsung a organizat aici primul lor eveniment de tip Unpacked din 2015 n cadrul
cruia a lansat Galaxy S6 i Galaxy S6 Edge.
HTC a venit cu telefonul One M9, brara
Grip pentru monitorizarea activitii fizice
i o pereche de ochelari-nspre-cti pentru realitatea virtual, Vive. LG a lansat
ceasurile inteligente Urban, unul dintre
ele pe un nou sistem de operare bazat pe
WebOS. Pe lng ei, cu siguran nu mai
puin vizitate, n special de pres, au fost
Microsoft, Lenovo, Acer, Huawei, Sony.
S ai posibilitatea s explorezi n premier astfel de device-uri la scurt timp dup
ce au fost lansate i s poi s discui despre ele cu reprezentanii productorului
este o oportunitate pentru pasionaii de
gadgeturi, pentru trendsetter-ii din IT sau
pentru cei care dezvolt aplicaii pe astfel
de echipamente. i pot spune c muli au
fructificat aceast oportunitate, dat fiind
micarea brownian permanent din
spaiul dedicat acestor gigani de-a lungul
ntregului eveniment.
O alt component care atrage
participani numeroi la MWC este cea a
conferinelor i seminariilor. Anul acesta
au fost peste 40 de sesiuni susinute de
reprezentani din aa numitele poziii de
tip C (CEO, CIO, CTO, CMO, COO)
ale unor companii ca Deutsche Telekom,
Ericsson, Huawei, Mozilla, SAP sau
Wikipedia. Sesiunea cea mai ateptat
pare s fi fost cea a lui Mark Zuckerberg,
care a continuat saga despre Internet.org
(poveste nceput la MWC14), insistnd
acum pe provocrile pe care Facebook le
are n a coordona furnizorii de servicii n
demersul de a asigura Internet n rile n
curs de dezvoltare. Pe ct de incitant suna
din descriere prezentarea lui Mark, pe
att de dezamgii se pare c au fost unii
participani.

nr. 33/martie, 2015 | www.todaysoftmag.ro

Dup ce scoatem marile lansri i


mult ateptatele conferine, din MWC15
mai rmn doar 1 900 de expozani
distribuii n 5 hale, fiecare din ele ca un
mall de dimensiuni decente, distribuit
pe orizontal. Nu exagerez cnd zic c n
ghidul participantului neiniiat n ale trgurilor ar trebui s se insiste pe importana
nclmintei ct mai comode. Ce presupune un trg al tehnologiei mobile? Fizic,
pe suprafaa acelor hale, multe standuri i
pavilioane. De la standuri de tip rafturi
ntr-un dressing, la pavilioane colorate,
sonore sau animate (i de animatoare, da,
sau de tot soiul de elemente dinamice),
n care s-au investit fonduri europene
sau pentru care au fost alocate bugete de
marketing. Expozanii au folosit spaiul de
care dispuneau fie mai sobru, rezumnduse n unele cazuri la slide-uri i brouri
cu serviciile sau produsele oferite, fie mai
spectaculos: prezentri, demonstraii ale
aplicaiilor sau ale device-urilor n aciune,
roboei circulnd de colo pn colo, echipamente sportive pe care s faci micare n
timp ce testezi un wearable; o dansatoare
de Flamenco, un barista alturi de reprezentantul de vnzri pregtit s prezinte
oferta sau s povesteasc cu tine, palmieri nefericit alei, un autoturism parcat pe
acolo s demonstreze cum comanzi pizza
de la volan. Toate pentru a-i determina pe
trectori s se opreasc la stand, s ncerce
produsul sau serviciul, s ia materiale
promoionale, s cear o carte de vizit sau
s iniieze un parteneriat de afaceri.

TODAY SOFTWARE MAGAZINE


Dincolo de simpla nagivare din stand
n stand, oportunitile de a gsi noi parteneri de afaceri sunt mai variate. O astfel
de nevoie nu a rmas neabordat, astfel
c exist ofert de servicii de cutare i
conectare la companii care pot rspunde
nevoilor unei afaceri servicii de B2B
Matchmaking. Aceste servicii sunt oferite
de firme specializate, dar am aflat c unele
ri participante au reprezentani oficiali
care se ocup de promovarea firmelor proprii printre ceilali expozani. Astfel, muli
participani merg la MWC cu o agend de
ntlniri planificat din timp.

Sibiu).

Altap se mic!

Altom s-a prezentat la MWC15 cu


Altap. Printre altomi el e cunoscut sub
numele de cod intern Mgoaia, pentru a nu uita de dimensiunea lui iniial;
sau Miska, la fel, pentru a nu pierde din
memoria colectiv intern momentul
emblematic din cadrul primului demo n
care s-a micat.

imaginilor i efortul colectiv al Altomilor


pentru designul testelor automate, asamblarea i prezentarea roboelului. i
alegerea numelui, s nu uitm. Legat de
partea hardware, n spe imprimarea 3D
a componentelor, am avut parte de ajutorul lui Alexandru Popescu, doctorand la
Universitatea Tehnic Cluj Napoca.

RomaniaIT. Creative Talent, Technical


Excellence

Patrusprezece companii din Romnia


au avut standuri la Mobile World Congress
anul acesta. Asociaia Romn pentru
Industria Electronic i Software Timioara
(ARIES-TM) cu sprijinul Ministerului
Economiei faciliteaz prezena firmelor la
MWC, n demersul de a schimba percepia
asupra pieei IT romneti de la companii
de outsourcing la companii inovatoare.
Sprijinul pentru expozani este de natur
financiar i acoper i unele aspecte
logistice. Iar pentru a beneficia de el dou
criterii trebuie ndeplinite: primul susine
centrarea pe inovaie, astfel c la trg ajung
firmele care prezint servicii sau produse
inedite; al doilea, mai pragmatic, este lipsa
datoriilor ctre bugetele de stat.

Astfel, la pavilionul Romniei vizitatorii au putut vedea modelele noi ale


telefonului Allview, oferte de soluii
informatice n domenii dintre cele mai
comune, dar care amelioreaz existena
cotidian, precum simularea unui examen
auto (la standul Dapredi Soft Systems din
Timioara) , monitorizarea flotelor auto (la
colegii de la Arobs Transilvania), aplicaii
educaionale (la Sphinx IT din Timisoara)
sau din domeniul medical (Ropardo din

Dincolo de complexitatea onomastic,


Altap este un roboel integrat ntr-o soluie
de executare a testelor automate pe telefoane sau tablete. Sau pe ceasuri inteligente,
cum ne-a sugerat unul dintre vizitatorii de
la stand. El extinde capacitile date de
framework-urile de testare automat i realizeaz aciuni pe care nu le putem efectua
programatic.
Demonstraia de la MWC15 a fost a
unui test scris n Appium i executat pe un
iPad. Prin test verificam mesajul de eroare
la login n aplicaia Wordpress, atunci
cnd setarea de Wifi era off. Dac cele mai
multe dintre aciuni i verificri le putem
realiza din Appium, pasul de comutare a
opiunii Wifi n starea off nu se poate realiza programatic; aici intervine Altap, care
prin braul mobil dotat cu stilou digital
execut aciunea pe care n mod normal
un tester ar trebui s o realizeze manual.
Astfel, scripturile de testare care presupun
interaciunea cu un sistem de operare mai
puin permisiv, precum iOS, pot fi rulate
fr ntreruperi pentru aciuni manuale.
Dincolo de dinamica dat la standul nostru, pentru vizitatori roboelul a
funcionat ca un exemplu al soluiilor cu
care venim pentru probleme de testare.
Agai de braul lui Altap, am putut
povesti cu ei despre viziunea noastr i
modul n care abordm testarea, despre
serviciile de consultan i cursurile pe
care le organizm pentru testeri.
Altap nglobeaz munca lui Bogdan
Birnicu, colegul nostru, pentru proiectul de licen, soluia colegei noastre
Ru pentru problema de recunoatere a

Alt-tester la MWC

Fr a fi o promotoare n materie de
device-uri i tehnologii mobile, ci doar o
utilizatoare de smartphone i tester al unei
aplicaii mobile, eu m-am bucurat de participarea la MWC15 ct s o cataloghez drept
cea mai fain experien profesional de
pn acum. Pe de-o parte, plimbndu-m
pe la celelalte standuri, am avut ocazia s
discut cu profesioniti din domenii conexe,
dar variate, despre produse, servicii, probleme ntmpinate; despre tendinele de
pe piaa tehnologiilor mobile, despre ce
provocri aduc ele i cum am putea s
le rspundem. Le-am urmrit structura
prezentrilor, cum rspund la ntrebri
dificile, cum i promoveaz compania i
cum i vnd serviciile sau produsele. i
am explorat n premier echipamente i
dispozitive pe care probabil voi testa n viitor. Din partea cealalt, cea de la standul
nostru, am avut posibilitatea s discutm
despre provocrile pe care le ntmpin
dezvoltatorii de aplicaii, managerii proiectelor IT sau oamenii de business n
legtur cu testarea aplicaiilor. Acesta a
fost un exerciiu excelent de a rspunde
unor probleme de testare i de a nelege
mai bine ce nevoi au beneficiarii muncii
noastre. Cumulat, a rezultat o experien
inedit de formare n materie de customer
awareness despre care mi face plcere s
povestesc. Deci, ntrebai-m despre ea.
Simina Rendler

simina.rendler@altom.ro
Software Tester
@ Altom Consulting

www.todaysoftmag.ro | nr. 33/martie, 2015

13

comuniti

Comuniti IT

a cum menionam n editorial am avut parte n luna martie de dou evenimente importante: ..even mammoths can be
Agile i Cluj Innovation Days. n luna aprilie va avea loc Startup Weekend, un important eveniment dedicat crerii de
startup-uri. Salutm de asemenea iniiativa grupului meetup Big Data pentru organizarea BigData Romanian Tour :
Cluj-Timioara-Bucureti.
Transylvania Java User Group
Comunitate dedicat tehnologiilor Java.
Website: www.transylvania-jug.org
Data nfiinrii: 15.05.2008 / Nr. Membri: 599 / Nr. Evenimente: 47
Comunitatea TSM
Comunitate construit n jurul revistei Today Software Magazine.
Websites: www.facebook.com/todaysoftmag
www.meetup.com/todaysoftmag

www.youtube.com/todaysoftmag
Data nfiinrii: 06.02.2012 /Nr. Membri: 2215/Nr. Evenimente: 30
Cluj Business Analysts
Comunitate dedicat analizei de business
Website: www.meetup.com/Business-Analysts-Cluj
Data nfiinrii: 10.07.2013 / Nr. Membri: 91 / Nr. Evenimente: 8
Cluj Mobile Developers
Comunitate dedicat tehnologiilor mobile
Website: www.meetup.com/Cluj-Mobile-Developers
Data nfiinrii: 05.08.2011 / Nr. Membri: 264 / Nr. Evenimente: 17
The Cluj Napoca Agile Software Meetup Group
Comunitate dedicat metodelor Agile de dezvoltare software.
Website: www.agileworks.ro
Data nfiinrii: 04.10.2010 / Nr. Membri: 437 / Nr. Evenimente: 93
Cluj Semantic WEB Meetup
Comunitate dedicat tehnologiilor semantice.
Website: www.meetup.com/Cluj-Semantic-WEB
Data nfiinrii: 08.05.2010 / Nr. Membri: 192/ Nr. Evenimente: 29
Romanian Association for Better Software
Comunitate dedicat oamenilor cu experien din IT indiferent de
tehnologie sau specializare.
Website: www.rabs.ro
Data nfiinrii: 10.02.2011 / Nr. Membri: 251/ Nr. Evenimente: 14
Tabra de testare
Comunitate format din testeri i ali profesioniti din industria
IT care, n cadrul unor ntlniri informale lunare, mprtesc
din cunotinele proprii i nva din experienele profesionale ale
celorlali membri.
Website: www.tabaradetestare.ro
Data nfiinrii: 15.01.2012/Nr. Membri: 1243/ Nr. Evenimente: 107

14

nr. 33/martie, 2015 | www.todaysoftmag.ro

Calendar
Martie 24 (Cluj)
Lansarea numrului 33 al Today Software Magazine
www.todaysoftmag.ro
Martie 24 (Timioara)
Timisoara WordPress March Meetup
meetup.com/Timisoara-WordPress-Meetup/
events/220966568/
Martie 25 (Iai)
Enki.js (what I learned building a web framework)
meetup.com/Iasi-JS/events/221279113/
Martie 26 (Timioara)
TdT#29 - the Testing Map by Claudiu Draghia
m e e t u p . c o m / Ta b a r a - d e - Te s t a r e - T i m i s o a r a /
events/220453273/
Martie 26 (Braov)
Flying Penguins: Embedded Linux Applications for
Autonomous UAVs
meetup.com/bv-tech/events/219375757/
Martie 27 (Cluj)
BigData Romanian Tour : Cluj-Timisoara-Bucuresti
me etup.com/Big-D at a-D at a-S cience-Me etup
-Cluj-Napoca/events/220876181/
Martie 31(Bucureti)
Mobile Advertising Congress
conference-arena.com/mobile-advertising-congress
Aprilie 1 (Bucureti)
April BucharestJS Meetup
meetup.com/BucharestJS/events/221195509/
Aprilie 14 (Cluj)
UI/UX Cluj Meetup (open call4speakers)
meetup.com/UXUICluj/events/220935531/
Aprilie 24 (Cluj)
Cluj Startup Weekend - recomandat de TSM
cluj.startupweekend.org/

programare

Realitatea virtual mbuntit pe


dispozitivele mobile

Alexandru Fediuc

alexandru.fediuc@msg-systems.com
Associate IT Consultant
@ msg systems Romnia

Virgil Andreies

virgil.andreies@msg-systems.com
Associate IT Consultant
@ msg systems Romnia

ealitatea augmentat a intrat n interesul consumatorilor, i bineneles i n cel al


programatorilor, odat cu dezvoltarea procesoarelor i a plcilor grafice pe dispozitivele mobile. ns unul dintre primele dispozitive care s-a folosit de ideea din
spatele acestei tehnologii a fost Sensorama, creat de Morton Heilig, acum mai bine de 40 de
ani. Dispozitivul funciona pe principii asemntoare dar cu un mod de implementare mai
rudimentar. Ceea ce a fcut cunoscut realitatea augmentat este apariia binecunoscutului
Google Glass, iar cel care a reuit s mping barierele mai departe este dispozitivul patentat
de Microsoft, Kinect mpreun cu ctile virtuale. Nu voi insista pe aceste subiecte, ele fcnd
parte din alt categorie, pe care a numi-o nc experimental. Totui aceste push-uri
tehnologice au fcut posibil apariia Realitii Augmentate (AR) i pe dispozitivele mobile.
Acum, chiar i un programator novice poate realiza o astfel de aplicaie cu ajutorul unor SDKuri puternice puse la discreia oricui.
AR este un mod de a augmenta elementele fizice prin suprapunerea acestora cu
coninut digital. Pentru dispozitivele mobile,
aplicaiile se folosesc de diveri senzori ai
acestuia precum GPS-ul, camera video sau
microfonul. Industria cea mai afectat de
acest trend este cea de gaming, venind puternic din urm i cea retail; ns din ce n ce mai
multe domenii gsesc realitii augmentate o
utilizare. Fie c sunt aplicaii de e-learning,
care pot identifica texte, logouri sau alte artificii grafice sau aplicaii care i pot spune
informaii doar poziionnd camera n faa
unui monument istoric, dovedesc faptul c
aceast tehnologie prinde deja contur.
AR-ul creeaz o legtura ntre utilizator, mediul nconjurtor i lumea virtual.
Tehnica AR-ul este aceea de a ataa, de a fixa,
elementelor reale imaginii 3D sau 2D prin aa
numiii markers. Un exemplu de marker
vizual este un cititor de bare 2D. De asemenea, n AR sunt folosii numeroi senzori
precum cei de micare i urmrire, senzori
de recunoatere sau analiza a imaginilor, a
gesturilor i de cele mai multe ori GPS-ul.

Metode de tracking

Pentru ca aplicaia s tie unde anume


eti i la ce anume te uii (locaia i orientarea camerei) este nevoie o camer video
calibrat. Sistemul prin care este calculat
locaia i orientarea relativ a acesteia se
numete tracking. Acesta este unul dintre
fundamentele realitii augmentate. Pentru
a transpune ns un obiect virtual, n mod
corect, n realitate este nevoie de ceva n plus,
iar acesta este un marker. Rolul lui este a
defini mrimea obiectului virtual precum i
de a recunoate orientarea camerei video. Un
marker bun este un marker uor de detectat
n orice circumstane, aa cum sunt cei bazai
pe diferene de luminozitate i nu cei bazai
pe variaiuni de culoare, ce pot deveni greu
de interpretat datorit variaiei de lumin.
Multe dintre sistemele de marker se folosesc de ptrate alb-negru pentru a realiza o
difereniere evident ntre markers i nonmarkers. Markerele pot fi de mai multe feluri:
template markers n care potrivirea
se face cu ajutorul unui ablon alb-negru.
Este indicat s se foloseasc o imagine clar

www.todaysoftmag.ro | nr. 33/martie, 2015

15

programare
Realitatea virtuala mbuntit pe dispozitivele mobile
definit, ncadrat de un chenar.
codurile de bare formate n majoritatea cazurilor din
celule alb-negre ncadrate de un chenar sau ce vin mpreun
cu nite repere grafice.
Markere imperceptibile imagini, markere infraroii,
miniaturi (markere imposibil de detectat de ochiul uman).

oferind multe instrumente n aceast direcie.

Metaio

O alt platform la mod i foarte uor de folosit este Metaio.


Ca i celelalte SDK-uri menionate mai sus, i aceasta acord
suport pentru majoritatea metodelor de tracking cunoscute: markeri, modele 3D, image target etc.. Importani ageni economici
au apelat la aceast platform n dezvoltarea unor aplicaii de succes: Ikea, Lego, Audi. Dar Metaio nu ofer instrumente de tipul
Code Once , de aceea e nevoie de a programa separat pentru
iOS i Android. Metaio prezint mult potenial, ns faptul c
trebuie s plteti pentru a folosi framework-ul i existena unei
documentaii destul de slab realizat ine muli poteniali programatori la distan.

Un alt mod de tracking este cel bazat pe model. Acest sistem


const n compararea unui model digital cu un obiect real din
cadrul unei scene. Acest concept se bazeaz pe analiza secvenial
a unei scene vizuale i oferirea unor descrieri conceptuale a evenimentelor ce au loc ntr-nsa. Pentru a nelege mai bine acest
sistem propun urmtorul scenariu: O strad pe care circul zilnic
maini si o camer de filmat deasupra acesteia. E nevoie n primul
rnd de separarea elementelor statice de cele dinamice, mai conchis spus, segmentarea micrii. Urmeaz crearea unor modele Crearea unei aplicaii de Augmented Reality utigeometrice 3D care s se suprapun pe ct mai multe categorii de liznd motorul Unity3D i extensia Vuforia pentru
maini i crearea unui model de micare al mainii n contrast cu Unity
oseaua static. Astfel se poate crea o scen n care mainile sunt
scoase din context i devin obiectul de interes.
Unity 3D

Frameworks

Exist deja pe pia mai multe librrii care vin n ajutorul


programatorilor oferindu-le posibilitatea de a investi timpul lor
mai mult n conceperea produsului i a ideii software dect n
algoritmii necesari crerii markerilor i folosirii diverilor senzori ai unui dispozitiv mobil. Majoritatea acestor framework-uri
sunt cross-platform, adic se pot folosi pe mai multe device-uri i
sisteme. Dintre toate acestea, trei SDK-uri mi-au captat atenia i
merit precizate.

Vuforia

Platforma celor de la Qualcomm ofer o gam mare de


suport pentru diverse sisteme avnd astfel posibilitatea de a scrie
o aplicaie nativ i de a o face disponibil pe o marj mare de
device-uri. Utilizeaz tehnologie bazat pe Computer Vision
pentru recunoaterea i urmrirea (tracking) imaginilor planare
(Image Targets) i a obiectelor 3D simple, precum obiecte cuboide sau sfere, n timp real. Ca avantaje, este de menionat faptul
c este o librrie gratuit ce ofer suport pentru iOS, android i
Unity 3D. Obiectele 3D pot fi create i prin intermediul codului,
suport multi-tag, extended tracking (cnd markerul nu mai este
existent n cadrul filmat) i face-tracking i nu n ultimul rnd
funcioneaz foarte bine cu motorul grafic NinivehGL. De asemenea, trackingul este mult mai stabil fa de celelalte platforme.
Faptul c nu are interfa grafic, c dezvoltarea unei aplicaii e
mai greoaie pn te deprinzi cu platforma i c va trebui s scrii
cod separat pentru sisteme (acest lucru ns poate fi rezolvat o
dat ce o integrezi cu Unity 3D) se numr printre dezavantaje.

DFusion

Pachetul celor de la Total Immersion deine o gam mare de


suport pentru majoritatea device-urilor. Are o interfa grafic
destul de bun n care ai posibilitatea s creezi ntregul scenariu. Partea de programare se realizeaz n LUA, iar librriile de
android i iPhone sunt deja precompilate, aplicaiile realizate
n DFusion fiind independente de sistemul de operare. Ofer
suport pentru Unity 3D i este compatibil cu fiiere din Maya sau
Blender. Platforma de dezvoltare DFusion Studio poate fi descrcat gratuit. DFusion este orientat mai mult pe partea de retail,

16

nr. 33/martie, 2015 | www.todaysoftmag.ro

Ce este Unity 3D ?
Unity 3D reprezint un motor 3D extrem de puternic precum
i un mediu de dezvoltare de aplicaii interactive extreme de user
friendly. Acesta are avantajul de a fi foarte uor de folosit, att
de persoane care nu au cunotine solide de programare, ct i
de cei experimentai. Un alt beneficiu reprezint faptul c Unity
Technologies ofer dou variante pentru dezvoltatori, cea gratuit
i varianta Pro pentru care utilizatorul este nevoit s plteasc.
Varianta Pro ofer mai multe feature-uri i unelte contra sumei
de 1500$. Acest pre este ns pe deplin justificat avnd n vedere
ct de permisiv este licena de publicare Unity. Pentru nceput,
versiunea gratuit ar trebui s fie ndeajuns. O scurt comparaie
ntre cele dou versiuni poate fi gsit la adresa http://unity3d.
com/unity/licenses , precum i locul de descrcare al versiunii
gratuite.

Caracteristici generale
Motorul se folosete de trei limbaje de programare: C#, Boo
i Unity JavaScript i poate fi folosit n a dezvolta aplicaii pentru
majoritatea sistemelor de operare, chiar i cele mobile. De asemenea, ofer posibilitatea de a lucra direct n mediul 3D, adecvat
pentru a crea niveluri de joc, meniuri, animaii, pentru a realiza
scripturi i a le ataa obiectelor. Iar toate acestea sunt accesibile cu
doar cteva click-uri, interfaa grafic fiind una extrem de uor de
nvat. Un proiect Unity reprezint un fiier simplu care conine
fiecare resurs ce aparine jocului sau aplicaiei interactive.

Assets
Assets reprezint fiecare resurs pe care aplicaia o utilizeaz. Aadar n Assets amintim modele 3D, materiale, texturi,
resurse audio, scripturi, fonturi. n afar de cteva obiecte simple,
considerate primitive, precum cuburi i sfere, Unity nu are posibilitatea de a crea aceste assets. n schimb, acestea trebuie create
extern utiliznd aplicaii de modelare 3D i unelte grafice de pictat, urmnd ca ulterior, acestea sa fie importate n Unity. Acest
lucru este extrem de uor de realizat, importarea fiind n acelai
timp robust i inteligent. Unity accept toate formatele de fiier
populare, incluznd 3D Studio Max, Blender, Maya i FilmBox
pstrnd materialele, texturile i rigging.

TODAY SOFTWARE MAGAZINE


Scenele

Scenele reprezint locaiile unde obiectele din assets vor fi


amplasate i aranjate pentru a crea ecrane de joc. Panoul cu ierarhia reprezint coninutul scenei curente ntr-un format de arbore.

Scripting
Script-urile sunt cunoscute ca behaviours. Ele asigur manipularea i crearea de interactivitate ntre resurse. Acestea pot fi
reutilizate pentru mai multe obiecte, ataarea lor pe resurs realizndu-se ntr-un mod extrem de simplu. n acelai timp, pot fi
adugate mai multe script-uri pe acelai obiect de joc.
Exemplu (C#):
using UnityEngine;
using System.Collections;
public class PlayerScript : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}

Observaie: Numele clasei trebuie s aib acelai nume cu fiierul


n care a fost creat.
Toate script-urile care se ataeaz pe obiect conin metodele
start() i update(). Metoda start() este apelat o singur dat
atunci cnd obiectul este creat, n timp ce metoda update() este
apelat o dat pe cadru.
void Update () {
float horizontal = Input.GetAxis(Horizontal);
float vertical = Input.GetAxis(Vertical);
transform.Translate(horizontal, vertical, 0);
}

Acum, dup ce am creat script-ul, el trebuie asignat assetului. Aceasta se face cu drag-and -drop pe obiectul de joc. Cu
script-ul asignat, se poate rula jocul.

Publicarea
Unity poate publica n Windows, OS X, i prin intermediul plug-in-ului Web Player. Web Player este un plug-in pentru
browsere care funcioneaz cu toate browserele cunoscute i ofer
aceeai performan cu aplicaia stand-alone pentru desktop.
Cu Unity Pro se poate publica pentru o gama mai larg de
platforme, incluznd: Android, iOS, Wii, Xbox One, Xbox 360,
PS3, PS4, Windows Store, Windows Phone, Flash.

Vuforia
Ce trebuie s tim despre Vuforia?
Vuforia are ncorporat n SDK-ul su mai multe tehnologii ce vin n ajutorul dezvoltatorilor. Printre acestea se numr
i Computer Vision, tehnologie prin care dezvoltatorii pot s
poziioneze i s orienteze obiectele virtuale, cum ar fi obiectele
3D n corelaie cu imaginile din lumea real cnd se realizeaz o
vizionare a acestora prin intermediul camerei unor dispozitive
mobile. Obiectul virtual urmrete poziia i orientaia imaginii
n timp real, astfel ca perspectiva utilizatorului asupra obiectului
va corespunde cu perspectiva imaginii target. Aadar, obiectul virtual va aprea ca parte a scenei din lumea real. Vuforia permite
cteva variaii de implementare ale realitii augmentate: modelul

peste care se suprapune aceast lume virtual/obiect virtual este


o imagine, o int unic numit Image Target, ce poate fi chiar un
marker oferit de Qualcomm. Vuforia ofer i posibilitatea unor
inte multiple.
SDK-ul suport o varietate de tipuri de inte, incluznd inte
markerless, configurri 3D multi-int, butoane virtuale folosind Occlusion Detection i posibilitatea de a crea i reconfigura
mulimi de inte la runtime. Vuforia ofer API-uri n C++, Java,
Objective-C i n limbajele .NET prin extensia la motorul Unity.
n acest mod, SDK-ul realizeaz suport att pentru dezvoltarea
n mediu nativ Android i iOS ct i dezvoltare de aplicaii AR
n Unity. Acestea pot fi la fel de uor de portat pe mai multe platforme, incluznd Android i iOS.
n exemplul descris n rndurile urmtoare se va folosi un
marker Vuforia gratuit. Obiectul 3D a fost suprapus peste imagine. Acest obiect este realizat cu un set de instrumente Blender
i Photoshop. Prin altgoritmii sofisticai de Computer Vision,
proprietile imaginii sunt detectate i urmrite. inta ajunge s
fie cunoscut prin comparaii succesive ale acestor trsturi i
www.todaysoftmag.ro | nr. 33/martie, 2015

17

programare
Realitatea virtuala mbuntit pe dispozitivele mobile
caracteristici cu cele ale imaginii pstrate ntr-o baz de date. n
momentul n care inta este recunoscut, aceasta va fi urmrit
ct timp se regsete n cmpul de vizibilitate al camerei foto/
video. Crearea intelor necesit acces n contul utilizatorului pe
site-ul Vuforia. intele sunt create din fiiere .jpg sau .png(RGB
sau greyscale). Caracteristicile sunt pstrate ntr-o baz de date,
fiind organizate n seturi de date.

Crearea i rularea unui exemplu - tutorial


Vom descrie sumar n urmtoarele rnduri toi paii (uni
dintre ei pot fi desigur omii prin abordri alternative) pentru
realizarea unei aplicaii de AR.
Se presupune c utilizatorul are instalate versiunile compatibile de Unity i extensia Vuforia pentru Unity. n plus, acesta are
nevoie de o camer web sau camera smartphone-ului sau tabletei
. De asemenea, printai pe o foaie A4 imaginea int dup creare.
Dup instalarea uneltelor, va trebui s v creai un cont pe site-ul
oficial Vuforia: https://developer.vuforia.com/user
Pasul urmtor este acela de a crea inta (Image Target).
Navigai la aplicaia web Target Manager pe portalul de developer. Aceast aplicaie permite crearea unei baze de date cu inte
pentru a putea fi folosite pe anumite dispozitive precum i n
cloud. Creai o baz de date i dai-i un nume i atribuii-i o int.
Dup ce ncrcarea intei este complet, Vuforia execut verificrile i procesrile necesare. Apoi putei descrca imaginea int.
Descrcai fiierul cu extensia .unitypackage care conine inta.
Pornii Unity, creai un proiect nou i importai fiierele
.unitypackage ale Vuforia (SDK-ul i imaginea int). tergei
camera principal (Main Camera) din ierarhia scenei. Importai
acum modelul 3D pe care dorii s l amplasai peste imaginea
int. n fereastra de Project, deschidei fiierul Assets/Qualcomm
Augmented Reality/Prefabs. Amplasai obiectul ARCamera n
scen. Cu acest obiect selectat, cutai n Inspector i asigurai-v
c opiunea Load the Data Set cu baza dvs. de date (Imagine
int) i setai-o ca Active. Din acelai fiier Prefabs importai
imaginea int n scen. Cu imaginea selectat cutai utiliznd
Inspector-ul i setai Data Set-ul ca imagine int. Imaginea creat anterior ar trebui s fie vizibil n editorul Unity. Adugai cu
drag-and-drop modelul n obiectul cu imaginea int din ierarhia
Unity. Utilizai-v de facilitile, valorile i uneltele de micare pe
axele x,y,z pentru a fixa obiectul 3D exact n centrul intei. De aici
ncolo, totul depinde de creativitatea dumneavoastr. O sugestie pe care v-o putem oferi este s amplasai o surs de lumin
(directional light) din Unity care s lumineze modelul. Exemplul
poate fi rulat prin butonul de Play. Vuforia i Unity vor detecta
camera web iar Vuforia va aplica algoritmii de detecie i urmrire i va amplasa obiectul pe imaginea printat. Aplicaia poate
fi apoi portat cu ajutorul instrumentelor interne din Unity pentru a rula pe un dispozitiv mobil.

18

nr. 33/martie, 2015 | www.todaysoftmag.ro

De ce abia acum realitatea augmentat?

Am ncercat n aceste rnduri s realizm o imagine de


ansamblu a acestei tehnologii emergente. Nu e ca i cum abia
acum s-a descoperit realitatea augmentat i implicaiile acesteia n viaa de zi cu zi. ns depirea problemele care intervin
n dezvoltarea acestei tehnologii (i implicit, regsirea ei n mai
multe arii) necesit timp de dezvoltare. Aceste probleme provin
din mai multe domenii: sociologic - concepia prin care vedem
dispozitivele mobile tot ca un fel de PC-uri cnd acestea pot fi
mult mai mult de att, tehnologic aplicaiile de tipul AR necesit
procesoare grafice puternice pentru a putea suprapune obiectul/obiectele 3D n timp real fr a-l distorsiona sau ntrerupe;
aceasta nseamn i consum de energie mult mai mare , user
interaction crearea unor aplicaii uor de folosit i aplicabile n
viaa real. O aplicaie AR trebuie s ruleze n timp real, altfel
aceasta va folosi informaii vechi, false. Performana aplicaiilor
AR pentru dispozitivele mobile este complet dependent de algoritmii de optimizare deoarece puterea de procesare i memoria
sunt limitate pentru acestea.
Aplicaiile AR sunt necesare n situaiile unde percepia
uman poate fi perfecionat i unde utilizarea obiectelor virtuale n viaa cotidian ne pot mbunti semnificativ traiul.
Aceste aplicaii ne pot aduce un nou mod de a vedea i de a
interaciona cu mediul nconjurtor i cel virtual totodat, o realitate mbuntit n propriu buzunar.

programare

Introducerea i tuning-ul
Hadoop MapReduce

apReduce este principala tehnologie de procesare de date de volum mare a proiectului Apache Hadoop. A fost dezvoltat de ctre Google. n 2004, ei au publicat
un articol care descria conceptul MapReduce.

Tudor Lpuan

tudor.lapusan@telenav.com
Java & Big Data developer
@ Telenav

n 2006, Dug Cutting a reuit s implementeze acest concept i s l includ


ntr-un proiect Apache, mai exact n Apache
Hadoop 1. Prima lansare a avut loc n 14
Septembrie 2007.
Acesta a fost nceputul Marilor Date
(Big Data) pentru toat lumea, ncepnd de
la persoane pur i simplu curioase, pn la
toate tipurile de companii. n scurt timp,
Apache Hadoop a ajuns la dimensiunea
unei comuniti foarte puternice, atrgnd
de asemenea juctori mari precum Yahoo,
Facebook, Ebay, IBM, Linkedin i alii2.
Pentru o adaptare mai uoar a tuturor, alte tehnologii au fost dezvoltate peste
MapReduce, care sunt mult mai uor de
nvat i de utilizat. Un exemplu este Apache
Hive 3, care a fost dezvoltat la Facebook.
Deoarece aproape toi cei din domeniul computer science au cunotine SQL, Facebook a
dezvoltat Hive, care le-a permis s-i interogheze i s-i analizeze seturile de date prin
simpla utilizare a limbajului HiveQL, care
este foarte asemntor cu SQL. Astfel, oricine din echipa Facebook, care are cunotine
SQL, avea capacitatea de a utiliza puterea tehnologiei MapReduce.

datelor. Are dou faze principale, faza Map i


faza Reduce i o alt faz, Shuffle, care nu este
att de bine cunoscut, dar n unele cazuri de
utilizare, poate s v ncetineasc sau s v
stimuleze ntreaga execuie.
Pentru majoritatea cazurilor de utilizare a
prelucrrii de date folosind MapReduce, faza
Map strbate toate seturile de date i aplic
mai multe filtre, iar faza Reduce este locul
unde ne aplicm efectiv algoritmii.
Pentr u a nelege mai bine c um
funcioneaz MapReduce, v recomand
s citii mai multe despre MapReduce
He l l o Wo r l d , m a i p r e c i s e x e m p l u l
Wordcount 4 . Acesta ne ajut s gsim
frecvena fiecrui cuvnt dintr-un set de date.
Frumuseea MapReduce const n faptul c
acelai cod care funcioneaz pentru un set
de date de civa MBs poate funciona pe
seturi mult mai mari, de TBs, PBs sau chiar
mai mult de att, fr vreo modificare de cod
n programul nostru. Aceasta se datoreaz
naturii execuiei distribuite a MapReduce,
care are grij n mod automat de distribuia
muncii i de eecul proceselor.
Mai jos, putei observa reprezentarea pseudocodului exemplului Wordcount.

O imagine de ansamblu a MapReduce.

mapper (filename, file-contents):

each word in file-contents:


MapReduce este o tehnologie distribu- for
emit (word,1)
it, care funcioneaz pe produse hardware
(word, values):
obinuite i se folosete pentru prelucrarea reducer
sum=0
1 http://hadoop.apache.org/

2 http://wiki.apache.org/hadoop/poweredby

3 https://hive.apache.org/

for each value in values:


sum=sum + value
emit (word, sum)

4 http://wiki.apache.org/hadoop/WordCount

www.todaysoftmag.ro | nr. 33/martie, 2015

19

programare
Introducerea i tuning-ul Hadoop MapReduce

n imaginea de mai sus, putei vedea procesul general al


MapReduce pentru execuia Wordcount. Fiecare faz Map si
primete setul de date i pregtete chei intermediare ca perechi
de (cheie,valoare), unde cheie (key) este cuvntul real, iar
valoare (value) este frecvena actual a cuvntului, mai exact
1. Faza de shuffling garanteaz faptul c toate perechile cu aceeai
cheie vor servi drept intrare pentru un singur reducer, astfel c n
faza de reduce putem calcula foarte uor frecvena fiecrui cuvnt

Ptrunderea MapReduce.

n primul rnd, urmtoarele proprieti i pai de configurare


implicai n tuning-ul MapReduce se refer la MapReduce V1.
Exist o nou versiune MapReduce V2, care poate s aib foarte
puine modificri. Sunt necesare cunotine MapReduce mai mult
dect elementare pentru a nelege urmtoarele seciuni.
Dup cum am menionat mai sus, n cadrul unei executri
MapReduce complete, exist dou faze principale, map i reduce
i o alt faz, shuffle ntre ele.

execut o sortare n memorie dup cheie i dac este disponibil


i o funcie de combinare, aceasta este rulat pe ieirea procesului
de sortare. Avnd o funcie de combinare, ne ajut s compactm
rezultatul functiei de map i astfel vom avea mai puine date de
scris pe disc i de transferat prin reea. De fiecare dat cnd pragul
tamponului este atins, un nou fiier de vrsare este creat, astfel
nct, n majoritatea executrilor de map, la final, putem s avem
fiiere de vrsare multiple n cadrul unei executri a unui map.
Dup ce faza de map este ncheiat, toate fiierele de vrsare
sunt unite ntr-un unic fiier partiionat i sortat. Este recomandat, de asemenea, s comprimai rezultatul map-ului pe msur
ce este scris pe disc pentru a grbi scrierea pe disc, pentru a economisi spaiul pe disc, dar i pentru a reduce cantitatea de date
transferat reducerilor. Opiunea de comprimare este dezactivat
n mod implicit, ns poate fi modificat foarte uor prin setarea
proprietii mapred.compress.map.output pe true. Algoritmii de
comprimare susinui sunt DEFLATE, gzip, bzip2, LZO, LZ4 i
Snappy.
Faza Reduce i primete setul de date printr-o metod de
cerere de date folosind protocolul HTTP. S vedem ce se ntmpl n partea de reduce.

Partea de reduce.

Partea de Map.

Fiecare faz Map primete ca intrare un block (input split


divizare de intrare) dintr-un fiier stocat n HDFS. Valoarea
implicit pentru un fiier block este de 64 MB. Dac dimensiunea
total a fiierului este mai mic de 64 MB, atunci faza Map va
primi ca intrare ntregul fiier.
Cnd faza Map ncepe s produc rezultate, acestea nu
sunt scrise direct pe disc. Procesul este mai amplu i profit de
memoria RAM prin alocarea unui tampon (buffer) acolo unde
rezultatele intermediare sunt stocate. n mod implicit, dimensiunea acestui tampon este de 100 MB, ns poate fi reglat prin
modificarea proprietii io.sort.mb. Cnd se atinge peste 80% din
dimensiunea tamponului, un proces de fundal va vrsa coninutul
pe disc. Pragul de 80% poate fi de asemenea modificat folosind
proprietatea io.sort.spill.percent.
nainte ca datele s fie vrsate pe disc, acesta este partiionat
pe baza numrului de procese de reduce. Pentru fiecare partiie, se

20

nr. 33/martie, 2015 | www.todaysoftmag.ro

Dup ce execuia map-ului este ncheiat, este informat coordonatorul execuiei (jobtracker), care tie la care procese de reduce
s trimit fiecare partiie. Mai departe, reduce-ul are nevoie de
rezultatele a mai multor faze de map care ncep s fie copiate
odat ce acestea sunt finalizate.
Rezultatele funciilor de map sunt copiate direct n memoria JVM a funciei de reduce, dac sunt suficient de mici. n caz
contrar, acestea sunt copiate pe disc. Cnd tamponul n memorie
(in-memory) atinge o anumit dimensiune (controlat de mapred.
job.shuffle.merge.percent) sau atinge un numr maxim de rezultate de map (mapred.inmem.merge.threshold), este unit i vrsat
pe disc. Dac este specificat un combinator, acesta va fi rulat n
timpul unirii pentru a reduce cantitatea de date scrise pe disc.
Dac n final vom avea multiple fiiere de vrsare pe disc, acestea
sunt de asemenea unite n fiiere mai mari, sortate, pentru a economisi timp pentru mai trziu.
Cnd toate funciile de map sunt ncheiate i rezultatele lor
sunt copiate pentru fazele de reduce, intrm n faza de unire, care
unific toate rezultatele funciilor de map, pstrndu-le ordinea
de sortare dup cheie. Rezultatul acestei uniri servete drept
intrare pentru faza de reduce. n timpul fazei de reduce, funcia
de reduce este invocat pentru fiecare cheie din ieirea sortat.

TODAY SOFTWARE MAGAZINE


Ieirea acestei faze este scris direct pe sistemul de fiiere, de obicei HDFS.
Faza de shuffle nseamn toate procesele din punctul n care
functia map produce rezultate pn unde funcia de reducerea le
consum. Cu alte cuvinte, faza de shuffle implic sortare, unire i
copierea datelor ntre map i reduce.

Reglarea (tuning-ul) configuraiei MapReduce

Dup ce am vzut paii interni ai MapReduce i i nelegem


mai bine, putem ncepe acum s mbuntim execuia general
a MapReduce.
Acum v voi oferi cteva sfaturi generale despre cum s v
reglai execuia MapReduce.
n general, este mai bine s acordai fazei de shuffle ct mai
mult memorie posibil, astfel nct datele vor fi prelucrate n
memoria RAM n loc de disc. Deoarece faza de shuffle folosete
memoria RAM din memoria atribuit fazelor de map i reduce,
trebuie s fim ateni n a lsa suficient memorie pentru ele. De
aceea este mai bine s scriei funcia de map i reduce pentru a
utiliza ct mai puin memorie posibil (evitarea acumulrii valorilor ntr-o colecie, spre exemplu).
Cantitatea de memorie alocat fiecrei funcii de map i
reduce este atribuit de proprietatea mapred.child.java.opts. Ar
trebui s le alocm ct mai mult memorie posibil, dar s nu
depeasc totui cantitatea de memorie RAM a serverului.
Pe partea de map, cea mai bun performan poate fi obinut
prin evitarea vrsrilor multiple pe disc, una singur este vrsarea optim. Pentru aceasta, ar trebui s detectm dimensiunea
rezultatelor funciei de map i s modificm proprietile corespunztoare (de ex. io.sort.mb), pentru minimizarea numrului de
fiiere de vrsare pe disc.
Pe partea de reduce, cea mai bun performan se obine cnd
datele intermediare pot s stea n totalitate n memorie. n mod
implicit, aceasta nu se ntmpl, deoarece pentru cazul general,
toat memoria este rezervat funciei de reduce. ns, dac funcia
Dvs. de reduce are cerine de memorie puine, atunci setarea
proprietilor corecte poate s v sporeasc performana. Pentru
aceasta, aruncai o privire la proprietile mapred.inmem.merge.

threshold i mapred.job.reduce.input.buffer.percent.

Concluzie

Dac dorii s facei doar o ncercare a tehnologiei MapReduce,


nu v recomand s v deranjai cu reglarea (tuning-ul) de mai sus,
deoarece configuraia implicit funcioneaz destul de bine. ns,
dac ntr-adevr lucrai cu seturi mari de date i dorii s ateptai
doar trei zile n loc de cinci zile pentru rezultatele analizelor Dvs.,
v recomand cu ncredere s luai n considerare reglarea (tuningul). Aici, n Cluj-Napoca, avem o comunitate BigData5 puternic,
unde am nceput s avem subiecte i ateliere relevante despre
BigData. Alturai-v nou dac dorii s descoperii mai multe!
Urmtoarea ntlnire6 va fi cea mai mare de pn acum, avem
vorbitori excepionali din Bucureti i Timioara, care vor vorbi
despre Elasticsearch, Spark, Tachyon i Machine Learning.

5 http://www.meetup.com/big-data-data-science-meetup-cluj-napoca/
6 http://www.meetup.com/big-data-data-science-meetup-cluj-napoca/events/220876181/

www.todaysoftmag.ro | nr. 33/martie, 2015

21

programare

Sisteme de mesagerie performante


Apache Kafka

Tiberiu Nagy

tiberiu.nagy@betfair.com

Senior developer
@ Betfair

dat cu rspndirea arhitecturilor bazate pe evenimente, sistemele de mesagerie au devenit componentele de baz ale arhitecturilor enterprise. Deoarece
aplicaiile enterprise prelucreaz din ce n ce mai multe date, performana sistemelor de mesagerie devine din ce n ce mai important pentru buna funcionare a
aplicaiilor, necesitnd platforme rapide i scalabile. Apache Kafka este un sistem nou
de mesagerie, care se remarc drept una dintre cele mai performante soluii la momentul actual, putnd transfera pn la un milion de mesaje pe secund pe un grup de trei
maini de capacitate medie.
Kafka a fost dezvoltat iniial la
LinkedIn, ntr-o perioad n care
LinkedIn-ul migra de la o baz de date
monolitic la o arhitectur bazat pe servicii, n care fiecare serviciu i avea propriul
lui model de stocare a datelor. Una dintre
probleme care s-a ivit n timpul migrrii a
fost distribuirea n timp real a jurnalelor de
acces de pe serverele web ctre serviciul de
analiz a activitii utilizatorilor. Inginerii
de la LinkedIn aveau nevoie de o platform
care s poat transfera cantiti mari de
date ctre mai multe servicii, ntr-un timp
ct mai scurt. Platformele existente s-au
dovedit a fi ineficiente pentru volumul de
date de care dispuneau, aa c i-au dezvoltat propriul lor sistem de mesagerie,
sub numele Kafka. Ulterior, proiectul a
fost lansat open source i donat la Apache
Software Foundation. Dup lansare, Kafka
a fost adoptat de mai multe companii care
aveau nevoi similare de transfer de mesaje.

Vitez vs. funcionaliti

Principalul obiectiv n proiectarea


Kafka a fost maximizarea vitezei de transfer al mesajelor. Pentru a obine viteze
ct mai mari, Kafka vine cu un model de
publicare regndit i renun la cteva dintre facilitile oferite de platformele clasice
de mesagerie.
Una dintre cele mai importante

22

nr. 33/2015 | www.todaysoftmag.ro

schimbri o reprezint modul de retenie


a mesajelor publicate. Productorii public
mesaje n Kafka, care devin disponibile
pentru procesat consumatorilor, ns
consumatorii nu trebuie s confirme procesarea mesajelor. n schimb, Kafka reine
toate mesajele primite pentru o perioad
fix de timp, consumatorii avnd libertatea
de a consuma orice mesaj reinut. Dei pare
ineficient la prima vedere, acest model de
lucru aduce o serie de avantaje:
S i m p l i f i c m u l t a r h i t e c t u r a
sistemului,
Kafka nu trebuie s rein care dintre mesaje au fost consumate i care nu.
Izoleaz productorii de consumatori.
n sistemele n care consumatorii sunt
obligai s confirme procesarea mesajelor, performana sistemului se poate
degrada odat ce numrul de mesaje
neconfirmate crete. Unele servicii
limiteaz rata la care productorii pot
publica mesaje pentru a nu suprasolicita
sistemul de mesagerie, ns aceast abordare poate duce la situaii periculoase
n care un consumator lent, dar neimportant afecteaz un productor critic
pentru business,
Consumatorii nu trebuie s consume
permanent, ei putnd fi oprii oricnd,
fr a impact sistemul de mesagerie. Ei
pot fi chiar i batch job-uri executate

TODAY SOFTWARE MAGAZINE


periodic. Desigur, abordarea aceasta
funcioneaz numai dac mesajele sunt
reinute n Kafka suficient de mult nct
procesele respective s apuce s prelucreze datele acumulate ntre rulri.
Deoarece mesajele nu trebuie reinute
selectiv, Kafka poate folosi un model de
stocare foarte simplu i eficient: jurnalul
de mesaje. Jurnalul nu e dect o list de
mesaje, n care mesaje noi sunt adugate
tot timpul la sfritul listei. Mesajele existente nu se modific niciodat. ntruct
jurnalul se modific numai la sfrit prin
adugarea de mesaje noi, ea se poate
stoca optim pe medii de stocare magnetice scrierea pe harddisk se poate face
secvenial, evitnd astfel deplasarea capului de scriere, o operaie costisitoare din
punct de vedere al performanei. De asemenea, dac consumatorii reuesc s in
pasul cu productorii de mesaje, Kafka
poate servi mesajele direct din memorie,
folosindu-se n acest caz de mecanismele
de caching oferite de sistemul de operare.
O alt diferen important fa de sistemele tradiionale o reprezint modul n
care pot fi consumate mesajele. Sistemele
tradiionale ofer dou moduri de consum: coad (queue) i publicare-abonare
(publish-subscribe). n modelul coad,
fiecare mesaj ajunge la un singur consumator. n modelul publicare-abonare,
fiecare mesaj ajunge la fiecare consumator. Kafka vine cu o singur abstractizare
care acoper ambele modele: grupuri de
consumatori. n Kafka, fiecare consumator face parte dintr-un grup, chiar dac e
singurul consumator din grup. n cadrul
grupului, numai un consumator poate
primi un mesaj. n schimb mesajele sunt

livrate tuturor grupurilor de consumatori.


Aceast simplificare permite sistemului
s ofere singur modalitate de a grupa
mesajele: topica. Modelul Kafka e de fapt
un fel de publish-subscribe, n care grupuri
de consumatori i nu consumatori individuali se aboneaz la o topic. Dac toi
consumatorii fac parte din acelai grup,
fiecare masaj va ajunge la un singur consumator din grup, topica funcionnd ca
o coad de mesaje. Dac n schimb fiecare consumator face parte din alt grup,
fiecare consumator va primi mesajele
publicatemodelul publish-subscribe clasic. n practic ns, vom avea de a face
cu un numr mic de grupuri de consumatori, fiecare grup corespunznd de obicei
unui serviciu interesat de datele publicate
n Kafka. n cadrul grupurilor vom avea
mai muli consumatori (de obicei cte
unul pentru fiecare main pe care ruleaz
serviciul). Deoarece fiecare grup primete
fiecare mesaj publicat pe o topic, serviciile
vor primi toate mesajele publicate, dar n
cadrul unui serviciu procesarea de mesaje
se va distribui ntre maini.

Arhitectura Kafka

n linii mari, un serviciu Kafka e format din mai multe maini care au rolul
de broker, ele reinnd mesajele publicate. Pe lng ageni, mai e nevoie i de un
grup de 35 maini care s ruleze Apache

Zookeeper. Kafka folosete Zookeeper


pentru coordonarea i managementul
brokerilor.
Deoarece volumul de mesajele publicate pe o topic poate depi capacitatea
unui broker, topicele se mpart la rndul
lor n mai multe partiii. Fiecare partiie e
de fapt un jurnal de mesaje. Partiiile trebuie s ncap n totalitate pe un broker, n
schimb, partiiile ce in de un topic sunt
distribuite uniform n cadrul brokerilor,
fiecare broker gzduind un numr aproximativ egal de partiii.

Cnd un productor vrea s publice


un mesaj n Kafka, productorul interogheaz un broker pentru a afla cte
partiii sunt i cum sunt ele distribuite n
cadrul brokerilor, decide n care dintre
partiii s publice (pe baza coninutului
mesajului, aleatoriu, sau lund prtiile
pe rnd), dup care trimite mesajul brokerului care gzduiete partiia aleas. Pe
partea de consumator ns, lucrurile nu
sunt aa de simple. Partiiile topicii sunt
distribuite n mod egal ntre consumatorii
dintr-un grup, fiecrui consumator revenind una sau mai multe partiii din care
poate citi mesajele. Pe lng distribuirea
uniform a sarcinii de consum, alocarea
partiiilor garanteaz c fiecare mesaj va

www.todaysoftmag.ro | nr. 33/martie, 2015

23

programare
Sisteme de mesagerie performante Apache Kafka
fi procesat de un singur consumatori din
grup. Indexul ultimului mesaj procesat din
fiecare partiie se reine n Zookeeper, astfel c, dac un consumator iese din grup,
partiiile lui pot fi realocate altor consumatori, care poate relua procesarea de la
ultimul mesaj citit. Partiionarea distribuie
uniform sarcina n rndul brokerilor, dar
ce se ntmpl n cazul n care un broker
iese din grup sau devine inaccesibil? n
funcie de natura problemei, partiiile gzduite de el pot deveni inaccesibile sau se
pot pierde definitiv. Pentru a preveni astfel
de situaii, Kafka introduce conceptul de
partiii replica (replica partitions). Fiecare
partiie gzduit de un broker (numit de
acum ncolo partiie lider) poate avea una
sau mai multe replici. Acestea sunt partiii
la rndul lor, doar c sunt stocate pe ali
brokeri dect cea pe care se afl partiia
lider. Productorii nu pot publica n
replici, numai n partiii lider, iar brokerii
pe care gzduiesc partiiile lider se asigur
c orice mesaj primit e salvat i n replici.
n eventualitatea pierderii unui broker,
unul dintre replicile fiecrei partiii lider
de pe brokerul pierdut se promoveaz la
statutul de lider, astfel nct Kafka continu s funcioneze fr ntreruperi i fr
pierderi de date. Cnd brokerul e repus
n funciune, el i sincronizeaz partiiile
de la ceilali brokeri, dup care ncepe un

24

proces de desemnare a liderilor pentru fiecare partiie.

Concluzii

Kafka reprezint o soluie bun pentru


aplicaiile care necesit o vitez mare
de transfer i o laten mic la livrarea
mesajelor. Arhitectura lui simpl i
modalitatea flexibil de grupare a consumatorilor l fac potrivit pentru o serie
de aplicaii: colectare de jurnale i metrici
de performan, procesare de secvene
de date i evenimente. Ca orice tehnologie, Kafka are i ea limitrile ei. Faptul
c mesajele nu pot fi reprocesate individual poate reprezenta o problem pentru
unele tipuri de aplicaii. O alt problem
o poate reprezenta lipsa de programe
i unelte de administrare. Spre deosebire de alte platforme gen ActiveMQ sau
RabbitMQ, Kafka are un ecosistem slab
dezvoltat. Necesitatea rulrii unui cluster de Zookeeper pe lng brokerii Kafka
poate de asemenea reprezenta un impediment financiar sau administrativ. Sperm
ns c o parte dintre aceste limitri vor
disprea odat cu rspndirea i maturizarea tehnologiei.

nr. 33/martie, 2015 | www.todaysoftmag.ro

programare

Date de tip spaial n SQL Server

atele spaiale sunt folosite pentru a reprezenta informaii despre locaia i forma
obiectelor geometrice. Aceste obiecte pot fi centrul unei locaii, reprezentat sub
forma unui punct, sau obiecte complexe: drumuri, ruri, orae sau ri.

Diana Muntea

diana.muntea@yardi.com
Software Developer
@ Yardi Romnia

ncepnd din 2008 suita de produse SQL


Server de la Microsoft ofer suport pentru
datele geospaiale. Acest lucru permite stocarea datelor n tabele sub form de puncte,linii
i poligoane. De asemenea, ofer att o gam
larg de funcii pentru manipularea lor, ct
i indeci spaiali pentru a permite o rulare
eficient. n SQL Server datele spaiale pot fi
de dou tipuri:
Geometrice (geometry) date reprezentate ntr-un sistem euclidian (plan, 2D),
Geografice (geography) - date care in
cont de curbura Pmntului i sunt reprezentate ntr-un sistem elipsoidal (3D sau
4D).

aceeai unitate de msur n care sunt


exprimate i coordonatele punctelor, iar
distana, ca numr de uniti, va fi mereu
aceeai indiferent de unitatea folosit.
n sistemul elipsoidal, care ine cont de
curbura Pmntului, coordonatele punctelor sunt exprimate folosind latitudinea
i longitudinea, n timp ce pentru distan
sau suprafa se folosesc de obicei metri.
Unitatea de msur depinde i de identificatorul SRID.
Ori entare a d atel or sp ai a l e
Orientarea nu este important pentru
datele de tip geometric. n schimb datele
geografice nu au nici o valoare dac nu le
specificm orientarea, pentru c nu vom ti
dac sunt n emisfera nordic sau sudic.
n SQL Server 2014 orice instan de datele
geografice trebuie s fie cuprins ntr-o singur emisfera. De asemenea i rezultatul
operaiilor dintre dou date de tip geografic (intersecie, uniune, diferen) trebuie
s fie definit ntr-o singur emisfer.

Ambele tipuri de date sunt implementate


folosind .NET common language runtime
(CLR). Cele dou tipuri se comport de cele
mai multe ori similar, dar ntre ele exist
totui cteva diferene:
Modul n care sunt conectate dou
puncte - pentru datele geometrice reprezint o linie dreapt n timp ce pentru cele
geografice este un arc circular.
SRID - Spatial Reference Indentifiers
Msurtorile spaiale n sistemul
Este un identificator care corespunde unui
planar distana este msurat folosind sistem spaial de referin i unui anumit tip
www.todaysoftmag.ro | nr. 33/martie, 2015

25

programare
Date de tip spaial n SQL Server
de elipsoid folosit pentru desenarea hrilor. Identificatorul este
definit de standardul European Petroleum Survey Group (EPSG).
O coloan poate conine date spaiale cu SRID diferite, dar nu se
pot realiza operaii ntre date care nu au acelai SRID, i nu sunt
bazate pe aceeai unitate de msur i aceeai proiecie. Cea mai
comun unitate de msur este metrul sau metrul ptrat. Pentru
datele de tip geometric valoarea implicit pentru SRID este zero,
iar pentru cele de tip geografic este 4326 (acesta este folosit i de
ctre Google Maps API).

Tipuri de obiecte posibile pentru datele geometrice i geografice

INSERT INTO myTable (geometryData)


VALUES (geometry::STGeomFromText(LINESTRING (100 100,
20 180, 180 180), 0));
INSERT INTO myTable (geometryData)
VALUES (geometry::STGeomFromText(POLYGON ((0 0, 150 0,
150 150, 0 150, 0 0)), 0));
GO
SELECT @geom1 = geometryData FROM myTable WHERE id = 1;
SELECT @geom2 = geometryData FROM myTable WHERE id = 2;
SELECT @result = @geom1.STIntersection(@geom2);

Date Geografice
CREATE TABLE myTable (
id int IDENTITY (1,1),
geographyData geography,
GO
INSERT INTO myTable (geographyData)
VALUES (geography::STPolyFromText(POLY
GON((-73.9998722076416 40.726185523600634,74.00708198547363 40.73860807461818,73.99824142456055 40.7466717351717,-73.97326469421387
40.74628158055554,-73.97309303283691
40.7269010214160, -73.9998722076416
40.726185523600634)), 4326));

Ce tip de date ar trebui s aleg pentru aplicaia mea


(geometry vs. geography)?
Imagine MSDN

Tipul de date ales depinde de aplicaie i de scopul ei. Din


punct de vedere al stocrii datelor nu este nici o diferen ntre
cele dou tipuri de date spaiale. n schimb, dac ne uitm la
performan, interogrile pe date de tip geometric sunt mult mai
rapide. n final cel mai important argument este funcionalitatea.
Dac avem o aplicaie n care dorim s realizm msurtori ntre
diverse locaii sau trebuie s inem cont de forma Pmntului,
va trebui s folosim date geografice. n alte cazuri, n care dorim
doar s vizualizm diverse poligoane, datele geometrice s-ar
putea s fie suficiente.

SQL Server ne pune la dispoziie mai multe tipuri de funcii i


metode pentru manipularea datelor de tip spaial : pentru importarea datelor (STGeomFromText, STGeomFromWKB), pentru
a realiza diferite tipuri de operaii(STContains, STOverlaps,
STUnion, STIntersection) sau pentru a face diverse msurtori
(STArea, STDistance), inclusiv pentru a determina cel mai apropiat vecin(STDistance(@me)) . ncepnd cu SQL Server 2012 este
definit i o form geometric numit FullGlobe, ea reprezint un
poligon care acoper tot globul pmntesc. Acest poligon are o
suprafa, dar nu are margini.
Aplicaii

Exemple
Date Geometrice

CREATE TABLE myTable (


id int IDENTITY (1,1),
geometryData geometry,
GO

26

nr. 33/martie, 2015 | www.todaysoftmag.ro

Radius search
S presupunem c avem o colecie de puncte definite prin latitudine i longitudine care reprezint diverse locaii. Acest tip de
cutare const n desenarea unui cerc, definit de un punct central
i o raz reprezentat ntr-o unitate de msur (metri). n acest
caz nu putem folosi dect date geografice, criteriul de cutare

TODAY SOFTWARE MAGAZINE


fiind distana dintre puncte.
Varianta optim ar fi s salvm punctele folosind trei coloane:
latitudine, longitudine i punctul geografic. n acest fel , nainte
de aplica filtrarea spaial, putem filtra datele folosind bounding
box-ul cercului.

Referine:
1.
2.
3.
4.

https://msdn.microsoft.com/en-us/library/bb933790.aspx
http://en.wikibooks.org/wiki/Geospatial_Data_in_SQL_Server
dotnetsolutions.co.uk/working-with-spatial-data-in-sql-server-2008/
https://devjef.wordpress.com/2013/01/12/geometry-vs-geography/

Punctul geografic

geoPoint = geography::STGeomFromText(POINT
(-96.8501 32.7639), 4326)
SELECT * from myTable
WHERE latitude < 32.7871617669569
AND latitude > 32.7500254131114
AND longitude < -96.8143320623701
AND longitude > -96.8584966119462
AND geoPoint.STDistance(
geography::STGeomFromText(
POINT(-96.836414337158146 32.768593590034193),
4326)) <= 2067

www.todaysoftmag.ro | nr. 33/martie, 2015

27

programare

Usable Software Design

ntr-un articol anterior pentru Today Software Magazine - Patru idei pentru
mbuntirea Software Design-ului-am scrisdespre faptulcavem tendina de
afacesoftware design care nu este orientat ctre utilizator.

Alexandru Bolboac

alex.bolboaca@mozaicworks.com
Agile Coach and Trainer, with a
focus on technical practices
@Mozaic Works

28

nr. 33/2015 | www.todaysoftmag.ro

Ori de cte ori vorbim despre


designnalte domenii dectsoftware-ul,
discutm din punct de vedere orientat
ctre utilizator. Produsele Apple sunt
renumite pentru c se concentreaz pe
experiena utilizatorului cu dispozitivul:cum se simte,cum arat,ct de repede
rspunde, sunetele pe care le scoate, etc. .
S of t ware D esig n-u l este singur u l
tipdedesign carepare s nu aib utilizator.La urma urmei utilizatorul final nu
arenici o ideedespre cum este organizat
aplicaia pe care o folosete i nici mcar
nu-i pas.Tot ce conteaz pentru el este ca
aceasta s funcioneze bine.
Software Design-ul are un utilizator:
programatorul care va trebui s schimbe
codul scris de echipa ta.Dac folosiicollective code ownership (ca majoritatea
echipelor Scrum), ar fi bine s luai n considerareuser-centric software design(software
d e sig n or i e nt at c t re ut i l i z at or ) .
Idei precum CleanCodeating aceast
abordare dar nu o dezvolt. n continuare,
a vrea s explorez acestsubiectn detaliu.

1. Dezvoltatorii noi care lucreaz cu


Usable Software Design vor deveni mai
productivi mai repede

De ce este gradul de uurin n folosire al aplicaiilor web un subiect att de


important astzi? A argumenta c motivul l constituie avantajul competitiv pe
care l aduce, deoarece utilizatorii gsesc
mult mai uor s nceap s foloseasc o
aplicaie care este construit avnd utilizatorul n minte. Niciun utilizator nu
are timp s nvee un produs nou; vrem
s ncepem s l folosim imediat i s ne
aduc beneficii instant.
Noii utilizatori ai software designului sunt noii dezvoltatori care se altur
echipei. Vom presupune c tiu limbajul
de programare, framework-ul principal
utilizat i au lucrat n domeniul business
nainte. Ct timp le ia s devin productivi n mediul vostru? Timpul petrecut
i familiarizeaz cu designul aplicaiei i
cu modul n care lucrurile se fac n mare
parte, dar se traduce prin cheltuieli. n termenii produsului, se numete pierdere.

TODAY SOFTWARE MAGAZINE


2. Cerinele cele mai comune sunt
implementate mult mai rapid cu Usable
Software Design

Gndete-te la tipul de activiti


desfurate pe produsul curent. ansele
sunt ca multe dintre ele s fie repetitive.
n aplicaia de eHealth pe care o dezvoltm, primele funcionaliti au luat
ceva timp pentru a fi implementate (NB:
n acelai timp nvm i o nou tehnologie). Privind atent la ceea ce ne-a ncetinit
lucrul i ajustnd designul, am optimizat
dezvoltarea i am ajuns la punctul n care
aproximativ 60% din munca este UI / UX
design. Acum, dezvoltarea nu mai arebottleneck. Ne-am uitat apoi la optimizarea
activitilor de UI / UX, dar asta e alt
poveste.
Cheia acestei mbuntiri a stat n faptul c privind n urm, ne-am dat seama
a implementa fiecare caracteristic;
c dezvoltam funcionaliti care cores discut deviaiile la retrospectiv;
pund ctorva tipuri de munc:
identific ce ne mpiedic s mergem
Adugarea unei noi activiti aplicat
mai repede;
pe situaia medical a pacientului:create,
definete i pune n aplicare
display, change, hide;
modificrile;
Legarea unei entiti medicale de o
repet.
intrare n jurnalul pacientului;
Afiarea unui istoric filtrat dup
Noi folosim un proces Kanban / XP,
diverse criterii; Etc..
aa c am folositthe cycle time distribution diagrampentru a identifica punctele
Din moment ce tiam din roadmap-ul de deviaie.Avem o retrospectiv recuproiectului c vor aprea din nou astfel de rent la fiecare dou sptmni n care
cerine, am nceput optimizarea pentru discutm impedimentele i identificm
aceste tipuri de munc.
soluiile. Implementarea a fost fcut n
Ocazional, trebuia s facem un nou tip urmtoarele dou sptmni, i ne-am
de munc care dura mai mult. Un exemplu pstrat un ochi lacycle time distributionn
a fost un serviciu de cutarea unui medi- urmtoarele luni. A fost uor s vedem
cament,care esterapid, scalabil i uorde mbuntirile deoarece majoritatea taskmodificat pentru a funciona corect cu urilor s-au mutat la stnga.
ultima versiune a bazei de date de medintr-un context Scrum, echipele nu
camente. A trebuit s nvm s folosim msoarcycle time, doar viteza. Problema
vertx i mongodb pentru a face lucrul este c viteza este un indicator agregat penacesta, i ne-a luat de 3-5 ori mai mult timp tru toate funciile implementate pe durata
dect o sarcin normal.Deoarece aceasta sprintului. Prin urmare, echipele Scrum
este o situaie local, care este puin proba- au dou opiuni pentru a ajunge la usable
bil s se repete, nu am fcut nimic pentru software design:
a optimiza.
Cantitativ: ncepe msurarea timIdeea este: ca o aplicaie care este uor
pului efectiv petrecut pe user story;
de folosit pentru taskuri mai comune,
Calitativ: executa o retrospectiv
Usable Software Design permite implerecurent pe tema de usable design.
mentarea rapid a celor mai frecvente
ntreab developer-ii ce le ia mai mult
tipuri de caracteristici.
timp dect ar trebui. ntr-o echip n
Acestea sunt principalele beneficii pe
care exist ncredere i transparen, vei
care le vd pentru Usable Software Design.
identifica imediat problemele.
Dar cum s-l obinem? Primul lucru este ...
Aceasta este metoda de baz pentru
3. Msoar i mbuntete
a obine usable software design. Metoda
Procesul pe care l-am folosit pentru a avansat este preluat din practicile de
face designul mai operaional a fost destul usability.
de simplu:
msoar ct timp este nevoie pentru

4. Ruleaz teste de usability pe Software


Design-ul tu

Testele de usability pot fi rulate n mai


multe moduri. Am gsit totui un format
care se potrivete cel mai bine pentru
Software Design:
Noteaz o list de task-uri pe care
utilizatorul trebuie s le execute
Aduntr-o camerutilizatoricare nu
au vzut niciodat produsul ( sau pri
ale produsului pe care vrei s le testezi).
Cere-le s execute task-urile.
Msoar ct timp le ia s fac asta.
Noteaz-i unde se blocheaz.
Folosete feedbackul pentru a
mbunti produsul.
Iat cteva exemple de task-uri comune
pentru o aplicaie web:
adaug un nou formular cu un cmp
text i un buton save;
adaug validari suplimentare unui
cmp;
schimb textul unei etichete (pentru
o limb sau toate limbile suportate);
adaug o nou regul de business;
afieaz o list de entiti ntr-o
pagin etc.
Enumerm cteva lucruri importante de
tiut despre teste de usability:
Asigur-te c le spui participanilor
c, dac nu tiu s fac ceva, este vina
designului, nu a lor. ncurajeaz-i s
pun ntrebri cnd se blocheaz.
Un test complet cu o singur persoan n-ar trebui s dureze mai mult de
o or.
ncepe cu task-urile cele mai comune
nti i cu ct mai puin informaie
posibil. Ofer informaie doar atunci
cnd cineva se blocheaz i cere ajutor.

www.todaysoftmag.ro | nr. 33/martie, 2015

29

programare
Usable Software Design
Pregtete cam zece task-uri, dar
Aa arat unpachet funcional cnd utilizatori, mai exact de la dezvoltatori.
ateapt-te s finalizezi mai puine. este extins:
Exist dou metode pentru a obine: prin
retrospective i rulnd teste de usability.
Acum tim cum s identificm proIdeea nu este complet nou. Principiile
bleme.Sunt sigur c urmtoare ntrebare
precum claritate i consisten au fost
este...
folosite muli ani la rnd pentru a obine
Design mai bun. Ideea de usable Software
5. Cum arat Usable Software Design?
Design este totui o schimbare de perPentru nceput menionez c ideea
spectiv; a te gndi la dezvoltator ca la
de a se centra pe developer, ca utilizator
utilizatorul software design-ului i a ncerca
al Software Design-ului, este foarte nou.
Fiecare conine trei lucruri:
activ s obinem feedback de la el sunt
Am vzut discuii oarecum n jurul aces o clas de request,
demersuri care vor aduce modificri n
tui topic, i am contribuit i eu la unele.
o clas de controller,
modul n care ne organizm codul.
Literatura din trecut despre Software
o clas de view.
Design a atins acest subiect, dar nu n mod
Mulumiri!
explicit.
nc trebuie s gsesc un loc mai bun
Am fost inspirat s scriu acest artiExist totui foarte mult literatur pentru InvoiceFileNameGenerator, dup col dup multe conversaii cu: Sandro
despre usability. Voi meniona doar trei cum putei vedea limpede. Aceasta este Mancuso, Samir Talwar, participanii la
principii de baz ale usability-ului care se o nclcare a celui de al treilea principiu, SoCraTes UK, Rebecca Wirfs-Brock, Adi
aplic n Software Design:
reducerea surprizei.
Bolboac, Claudia Rosu i muli alii.
Claritate,
Consisten,
Consisten: Fiecare tip de clas trebuie V invit pentru o dezbatere mai apro Reducerea surprizei.
s aib o interfa consistent
fundat n cadrul Workshopului de
Am vzut mai devreme c un pachet Usable Software Design la I T.A.K.E.
Prezentm cteva exemple:
funcional const din trei tipuri de clase: Unconference 20151.
a clas de request, o clas de control1 h t t p : / / 2 0 1 5 . i t a k e u n c o n f . c o m / s e s s i o n s /
Claritate: Numete pachetele n funcie ler i o clas de view. Exist i un nivel alex-bolboaca-usable-software-design/
de denumirea funcionalitii (pachete mai ridicat de consisten la care se
funcionale)
poate ajunge, mai specific n interfaa
Iat un screenshot de la o aplicaie pe fiecreia dintre aceste tipuri de clase.
care o dezvolt. Poi spune ce face doar pe n acest exemplu, toate clasele de
baza numelor?
Request menionate mai sus au o
metod:response()Toate funciile controllers au o metod:render().Fiecare funcie
de controller folosete un view pentru a
reda informaia. Aceste interfee sunt consistente n toate pachetele funcionale.
Prima oar l-am auzit pe Sandro
Mancuso vorbind despre ideea aceasta la Gnduri finale
I T.A.K.E. Unconference 2014 (2014.itaUsable Software Design vor aduce
keunconf.com) i am fost foarte interesat dou beneficii economice majore:
s ncerc. Vd ideea ca pe un bun start n implementare mai rapid pentru task-urile
Usable Software Design.
comune i integrare mai uoar a oameniConsisten: Pstreaz o struc- lor noi n proiect.
tur consistent pentru fiecare pachet
Pentru a obine Usable Software
funcional
Design, avem nevoie de feedback de la

30

nr. 33/martie, 2015 | www.todaysoftmag.ro

management

Quality Assurance n Agile

Vasile Selegean

vasile.selegean@isdc.eu
QA Officer
@ ISDC

presupunem c maina noastr de colecie are nevoie de un strat nou de vopsea. Sau
trebuie s zugrvim noua noastr cas. Vom angaja cei mai buni profesioniti, le vom
cere s foloseasc cele mai bune materiale de pe pia si chiar vom accepta s pltim un
pre mai mare dect media. Echipa angajat termin la timp, fr s depeasc bugetul. Toat
lumea e fericit i poate va fi i o mic petrecere de inaugurare! Dar, ntr-o lun sau dou, mici
pete de rugin sau crpturi apar n vopseaua proaspt.. Ce s-a ntmplat? Cea mai bun
echip nu a lsat suficient timp pentru stratul de suport s se usuce i au aplicat vopseaua dup
numai patru ore, nu ase, ct ar fi fost nevoie n conformitate cu specificaiile productorului.
Ce lipsete din acest scenariu este un
proces de execuie corect definit i urmrit
in timp. Nu a fost vorba despre un pas srit
n intregime, ceva ce s-ar fi putut observa la
timp pentru a fi corectat nainte de finalizarea lucrrii, doar o mica scpare ce nu prea
semnificativ n acel moment dar care, n
timp, s-a dovedit mai costisitoare dect ntrzierea ce s-ar fi ntmplat dac s-ar fi urmat
specificaiile.

Ce este Quality Assurance?

Quality Assurance reprezint o suit


de activiti peste care se trece cu mult prea
mult uurin n echipele ce au adoptat
modelul SCRUM. Motivele sau scuzele sunt
multe, de la timpul scurt alocat dezvoltrii i
nevoii de a livra ct mai rapid un produs, la
ncrederea acordat echipei de testare pn la
nenelegerea total a conceptului de calitate.
Acest lucru nu este ceva ce poate fi trecut att
de uor cu vederea sau amnat pn cnd
condiiile o vor permite acel moment s-ar
putea s nu vin niciodat. Consecinele pot
fi semnnificative i pot merge de la timpul
necesar fixrii defectelor (pe cheltuiala proprie) pn la pierderea ncrederii clienilor.
Asigurarea Calitii nu trebuie confundat
nici cu Controlul calitii cea din urm

reprezint ultima etap n procesul de asigurare a calitii, deoarece, pentru a fi siguri de


rezultat, este nevoie de un produs funcional,
ct mai aproape de varianta final.
S ncepem cu definiia calitii: calitatea
unui produs (fie c e vorba despre un avion,
un hot-dog, un serviciu sau un software) este
un atribut distinctiv al produsului respectiv, n comparaie cu un alt produs similar.
Folosim expresia produsul A este de calitate,
dar aceasta are sens doar cnd comparm acel
produs cu un altul, similar. Mult mai des spunem produsul X este de o calitate mai bun
dect produsul Y, iar aceasta este n conformitate cu spiritul definiiei de mai sus. Pna la
urm calitatea nseamn s livrm ce ateapt
clientul s primeasc. Nu mai puin (motivul
e clar) dar nici prea mult, pentru c s-ar putea
s nu fim pltii pentru munca noastr.
Calitatea unui produs sau serviciu este
o sum a mai multor criterii de calitate, fie
c sunt definite explicit la nceputul proiectului, de ctre toate prile implicate, fie sunt
subnelese, fr un acord scris. Asemenea
criterii sunt (sau ar trebui) s fie rezultatul
unei analize riguroase i a nelegerii nevoilor utilizatorului final. Aceste nevoi sunt
traduse n ceea ce numim factori de calitate
(quality factors) ce vor fi mai apoi integrai

www.todaysoftmag.ro | nr. 33/martie, 2015

31

management
Quality Assurance n Agile
n produsul final prin criteriile de calitate
amintite mai sus. Aceste criterii trebuie s
fie msurabile i metricile astfel obinute
vor fi folosite apoi att pentru evaluarea
calitii produsului n timpul ciclului de
dezvoltare i la momentul livrrii ct i ca
fundament pentru eventuale mbuntiri.
Calitatea unui produs este rezultatul
unui mix a tot ce contribuie la dezvoltarea respectivului produs: factorul uman
(echipa de proiect), echipamentul sau
tehnologia pe care acetia l/o folosesc i
procesul de lucru, prin care se transform
materia prim n produs final. Quality
Assurance i propune s gseasc acel
echilibru perfect ntre cei trei actori ce
contribuie la realizarea produsului.
Pna la urm calitatea este acel factor ce
poate face diferena ntre produsul nostru
i altele similare disponibile n piaa liber.
Cel mai probabil exist undeva n lume alte
organizaii cu acelai nivel de cunotine cu
al nostru; unele dezvolt produse similare
cu al nostru, unele mai ieftin, altele mai
repede. Nimic nu oprete un consumator
n anul 2015 s aleag cellalt produs. Doar
calitatea produsului propriu poate s fac
remarcat produsul care nu trebuie s fie
perfect nici nu exist produse perfectedar trebuie s rspund ct mai bine unei
nevoi a consumatorului i s fie puin mai
bun dect al concurenei.
Peter Leeson CMMI and Process
Improve me nt L ead Apprai s e r and
Instructor- a rezumat aceasta n articolul
Understanding Quality de pe blogul
personal1:
Understanding quality is the most
critical aspect of your job, whatever it
is. Quality is what differentiates your
products and services from the others. If
your sole focus - as reflected by measurements is quick and cheap, you will lose
the battle: there will always be someone
cheaper than you.
Asigurarea Calitii este un set de
activiti ce au ca scop includerea atributelor de calitate n produsul final. Este
nevoie de implicarea activ a tuturor celor
ce particip, indiferent de etapa din viaa
produsului, de nivelul de senioritate sau
de locul n organigram. Att timp ct
cineva poate influena dezvoltarea unui
produs sau serviciu, are i o responsabilitate n asigurarea calitii produsului
rezultat.
Asigurarea calitii se mparte n dou
1 www.qpit.net/blog/understanding-quality.html

32

Fig. 1: Rolul QA intr-un proiect.

categorii majore. n prima categorie intr


activitile de prevenire a defectelor n
timpul procesului de dezvoltare prin
definirea unui mod de lucru standardizat, stabilirea momentelor i frecvenei
validrilor i verificarilor precum i revizuirea ntregului proces. Msurtorile a
diferii indicatori (KPIs), analiza acestor
msurtori, msurile de mbuntire sau
de corectare a activitii i evaluri periodice la toate nivelurile implicate sunt
parte a acestui proces de prevenie. A doua
categorie se concentreaz pe detectarea
defectelor n produsul final i este cunoscut i sub numele de Control al Calitii.
Bineneles, toate cele de mai sus vin cu
un cost asociat. n faza iniial a proiectului este nevoie de planificarea riguroas a
tuturor activitilor legate de QA: identificarea nevoilor utilizatorului, translatarea
acestora n obiective de calitate, planificarea monitorizrii progresului, identificarea
sau definirea celui mai bun model pentru
ntreg procesul de dezvoltare i lista poate
continua. n timpul fazei de dezvoltare
trebuie executate cu regularitate, conform planului, activiti de monitorizare
a performanei procesului de dezvoltare
i a calitii; este necesar planificarea
momentelor de evaluare: frecven, context i obiective; evaluarea progresului
(sau a regresului) din perioada scurs de
la ultima verificare; luarea msurilor de
corecie necesare dac este cazul; evaluarea costurilor i a beneficiilor activitilor
executate (de exemplu: costul revizuirilor
comparat cu costul necesar reparaiei unor
eventuale defecte ce pot aparea n produsul
final) i, n sfrit, ajustarea ntregului proces de munc astfel nct s serveasc ct
mai bine nevoilor proiectului.

nr. 33/martie, 2015 | www.todaysoftmag.ro

Mai mult, rezultatele msurtorilor


colectate n timpul existenei proiectului
de dezvoltare, mpreun cu setul de practici cu utilitate dovedit n timp, constituie
un bun valoros pentru orice organizaie.
Acestea pot fi folosite ca punct de plecare
n dezvoltarea cu succes a unui nou produs
sau n crearea unei noi echipe. Existena
unui set de bune practici ce i-au dovedit n timp utilitatea pot fi de ajutor i n
integrarea unor capaciti suplimentare
ntr-un sistem existent, fie c este vorba
despre un nou membru n echip, de un
nou tool sau chiar un nou proces.
n concluzie, activitile grupate sub
denumirea generic de Quality Assurance
sunt o component vital n orice proces de dezvoltare a unui produs.Quality
Assurance poate fi asemnat cu un echipament GPS folosit pe scara foarte larg n
zilele noastre. Ajut la stabilirea unei rute
i ofer o estimare a costului cltoriei.
Totui, acel aparat nu poate fora un ofer
s urmeze ruta stabilit, dar, la nevoie,
ofer rute alternative sau indicaii ctre
drumul ce a fost acceptat initial.

Cum se potrivesc acestea ntr-un mediu


Agile?

Prima afirmaie din Manifestul Agile


spune c acei care vor mbria aceast
filozofie vor preui mai mult Indivizii
i interaciunea dintre acetia n locul
proceselor. Deci.. adugarea unui proces
nou ntr-un mediu Agile nu pare o idee
foarte bun.
Citind mai departe manifestul Agile
se spune limpede c, dei nu se contest valoarea prii a doua din fiecare
afirmaie, se pune pre mai mare pe cea

TODAY SOFTWARE MAGAZINE


din partea stng. Mai mult, n pagina (i la nevoie execut fr nicio ezitare) i se
dedicat istoriei micrii Agile, scris de adapteaz foarte repede oricrei schimbri
Jim Highsmith, gsim urmtorul paragraf2: a mediului nconurtor. Aceasta este mai
mult definiia unui pluton al unei uniti
The Agile movement is not anti- din forele speciale, nu al unei echipe de
methodology, in fact, many of us want to programatori palizi. Din pcate, nivelul
restore credibility to the word methodo- de maturitate necesar pentru funcionarea
logy. We want to restore a balance. We efectiv a unei echipe Scrum nu este ceva
embrace modeling, but not in order to ce se poate obine peste noapte. Membrii
file some diagram in a dusty corporate echipei trebuie s neleag la un nivel
repository. We embrace documentation, acceptabil clientul i nevoile de business
but not hundreds of pages of never-mai- ale acestuia astfel nct produsul dezvolntained and rarely-used tomes.
tat s vin n ntmpinarea acestor nevoi.
Fiecare membru al echipei trebuie s aib
Putem verifica i printre cele douspre- ncredere total n omul de lng el i este
zece principii Agile3: nimic nu interzice de ateptat ca ei s rateze de cteva ori
definirea unui proces care s ne ajute n nainte de a ajunge la cea mai bun soluie
munca noastr zilnic i astfel s ne folo- indiferent de problema asupra creia i
sim de ceea ce am nvat de-a lungul ndreapt atenia ntr-un anume moment.
timpului. Nu cred c a spus cineva vreoAa cum am vzut mai sus fiecare
dat c preuiete mai mult colaborarea membru al echipei joac un rol important
ntr-o echip n defavoarea calitii. Sau, n construirea unui produs final de calitate.
dac a spus-o, e puin probabil s mai con- Din pcate, nu ntotdeauna este clar acest
duc vreo afacere acum.
lucru responsabilitatea se dilueaz ntre
Oare este posibil ca un proces de toi participanii la procesul de producie
management al calitii s nu contravin i, cteodat, este ceva subneles (sunprincipiilor Agile? Oare s-ar putea defini tem profesioniti, tim fiecare dintre noi
procese de lucru pentru diferite etape din ce avem de fcut). Programatorii prograviaa unui proiect (sau produs), pentru meaz, tester-ii testeaz pentru aceasta
fiecare rol implicat, n aa fel ca aceste pro- suntem aici pna la urm, nu? De ce un
cese s AJUTE o echip Scrum?
programator ar trebui s revizuiasc scripScrum - cea mai folsit aroma de turile sau cazurile de test? Nu este vorba
Agile - este un model al unui proces de despre o verificare din punct de vedere
dezvoltare software. Se pune accent pe sintactic, dar s se asigure c munca procolaborarea ntre membrii echipei i ntre prie funcioneaz conform cu ateptrile
echip i client n dorina de a rspunde clientului i dincolo de cazul trivial (happy
mai repede nevoilor clientului, de a livra flow)! A contestat vreodat cineva rolul sau
ntr-un timp mai scurt i de a reaciona activitile managerului de proiect ntr-o
mai bine la schimbare. Conform definiiei, echip Scrum? Doar exist Scrum Master
o echip Scrum trebuie s fie capabil s se care s conduc echipa! Sau, pentru c
organizeze independent i s aib un nivel exist un Product Owner, de ce un rol de
suficient de maturitate. Fiecare nevoie este Requirement Engineer specializat? Aceast
acoperit, fiecare membru i cunoate dezbatere ar putea continua la nesfrit.
reponsabilitile, tie exact ce are de fcut
Quality Assurance poate ajuta o echip
Scrum s-i clarifice scopul i s pstreze
2 http://agilemanifesto.org/history.html
ritmul i direcia astfel nct s-i ating
3 http://agilemanifesto.org/principles.html

acel scop fr prea multe devieri pe parcurs. Ajut de asemenea la stabilirea unor
responsabiliti clare fiecrui rol implicat
n procesul de dezvoltare. Prin definirea
clar a unui mod de lucru, indiferent c
vorbim despre dezvoltare propriu-zis,
despre felul n care sunt tratate defectele
sau despre implementarea unor metode
efective de monitorizare i control, se
poate reduce riscul repetrii acelorai
greeli pe parcursul dezvoltrii produsului sau n cazul unuia nou. Cnd exist
un traseu clar, msurabil, nspre scopul
final se pot observa mai uor eventualele
deviaii i permite s se intervin nainte
ca acestea s se transforme n adevrate
probleme pentru parcursul proiectului.
Este un mecanism de siguran ce poate
preveni sau reduce semnificativ daunele
ce pot s apar n unele cazuri. Un design
sau un proces de dezvoltare perfect nc
nu s-a inventat. ntr-adevr, cteodat
costurile de implementare ale unui proces
de calitate eficient pot fi i mai mari dect
beneficiile (cum ar fi de exemplu un proiect mic, ce se poate realiza ntr-o perioad
scurt iar corectarea eventualelor defecte
poate fi suportat cu uurin de ctre
organizaie). ntr-un astfel de scenariu o
firm se poate baza pe experiena echipei,
dar aceste cazuri sunt excepii i nu trebuie
generalizate.
Prin observarea i revizuirea continu a fiecrui aspect al produsului i a
modului de lucru, ntregul proces de dezvoltare prinde via i evolueaz n timp.
Metodologia Scrum se concentreaz asupra procesului de dezvoltare propriu-zis
a software-ului, dar aceasta nu e suficient
pentru crearea unui produs de succes.
Dac cineva ajunge s cunoasc cele
dou lumi (Agile/Scrum i metodologia
bazat pe procese) poate ajunge la un
moment evrika, n care i d seama c
acele dou lumi nu se exclud reciproc!
Poi defini un proces de lucru viu, care

www.todaysoftmag.ro | nr. 33/martie, 2015

33

management
Quality Assurance n Agile
evolueaz ca rspuns la schimbri, dup
modelul Agile. Sau, dac se alege Scrum
ca arm principal pentru dezvoltare,
tot trebuie s implementm un sistem
de management al calitii sau s ne asigurm c cerinele produsului acoper n
ntregime nevoile de business ale clientului. Acest fel de a privi lucrurile nu este
nou i nici foarte dificil de implementat!
Cea mai dificil ncercare este schimbarea
modului de a gndi al membrilor echipei,
s priveasc dincolo de task-ul curent sau
de obiectivele pe termen scurt. S faci
o ntreag echip s neleag c scopul
final nu este terminarea tuturor task-urilor la timp pentru demo ci construirea
unui produs de care cineva i va aminti i
peste doi-trei ani. n plus, toat experiena
ctigat n timpul proiectului nu se va
pierde i va putea fi folosit n viitor.
Iat ce spune Peter Leeson despre acest
subiect4:
Over the years, different terminologies have come into existence, which
are considered as the new way of doing
things. In theory, it means that people
have identified the weaknesses of the
way they are working and are therefore
trying to find a new, more successful
approach. In reality, it appears that the
weaknesses due to misunderstanding
and misapplication of basic principles
have led to results which are very different from what was originally expected.
We then get a group of people who
believe that the new approach is the
solution to all their previous problems
and start following it with religious fervour, throwing out anything which does
not correspond to the new vocabulary
and focusing only on applying what they
have understood from what they have
read in a book - soon they are producing
the same mistakes as previous generations and it becomes time for someone to
re-create the basic ideas...
n concluzie, la fel ca n multe aspecte
ale vieii de zi cu zi, adevrul este undeva
la miloc. Nu exist un adevr absolut i
niciun grup nu poate susine c are rspuns la orice ntrebare. Nu exist niciun
silver bullet sau panaceu pentru orice
ncercare ce am putea-o ntlni.

Care este viziunea asupra asigurrii


calitii?

ISDC a rspuns provocrilor de mai


4 http://www.qpit.net/blog/getting-started-101-pro-

cess-agile-or-lean.html

34

sus urmnd calea de miloc. n urm cu mai


mult de cinci ani, cu suport total din partea echipei manageriale, un grup entuziast
a nceput munca la ceea ce avea s devin
un mod de metoda intern standard de
implementare a calitii i de dezvoltare
continu a tuturor activitilor zilnice.
Fiecare proiect de succes a fost analizat i un set de bune practici a fost extras
din experiena ctigat de-a lungul anilor.
Aceste practici au fost grupate pe arii specifice ce acoper fiecare aspect din viaa
unui proiect. Astzi sunt 24 de procese
definite ce includ aproximtiv 300 de taskuri descrise n detaliu (cine execut? Cum
ar trebui executat? Cnd? Plus criterii de
intrare/ieire). Au fost definii indicatori
i msurtori specifice acestor indicatori.
Acest grup funcioneaz i azi, analiznd msurtori, rspunznd ntrebrilor
colegilor i implementnd sugestiile de
mbuntire ce vin din organizaie.
Procesele astfel definite au devenit un
standard intern i apoi a nceput munca de
rspndire a experienei sintetizate n procesele definite napoi n organizaie.
Este imposibil s defineti un proces ce
s se potriveasc oricrei situaii, n orice
proiect. Ca urmare s-a creat i un set de
reguli pentru ajustarea proceselor definite astfel nct procesele s rspund ct
mai bine nevoilor proiectului. Acest set de
reguli este de asemenea revizuit constant
i este mbuntit continuu mpreun cu
definiiile proceselor.
A fost creat i o echip specializat
n quality assurance, condus de Quality
Manager, pentru a asigura suport echipelor
de proiect n definirea unui plan de management al calitii, n definirea obiectivelor
de calitate ale produsului ce urmeaz a fi
dezvoltat i de definire a unui mod de
lucru standard pentru ntreaga durat
de via a proiectului. QA Team observ
modul de lucru ntr-un proiect i propune
mbuntiri pe baza definiiilor de proces
de la nivelul organizaiei sau promoveaz
practicile ce pot aduce mbuntiri n
munca altor echipe. QA Officers sunt un
grup independent iar prin aceasta se asigur obiectivitatea evalurilor modului
de lucru al echipelor cu care colaboreaz.
Pe lng evaluri, QA Team identific i
documenteaz deviaiile, ofer feedback
echipelor i conducerii pe tema caltii i
a modului de lucru i se asigur c eventualele neconformiti sunt adresate la
timp. Pentru c lucreaz aproape de echipele din proiecte QA Officers sunt n prima
linie de promovare a standardelor interne
i ajut la colectarea de feedback pentru

nr. 33/martie, 2015 | www.todaysoftmag.ro

dezvoltarea ulterioar a definiiilor de


proces la nivel de organizaie. Standardul
intern ISDC a fost construit pe baza
modelului Capability Maturity Model
Integration for Development (CMMIDEV v1.3) creat de Software Engineering
Institute, un centru de cercetare nonprofit de la Carnegie Mellon University5.
Practicile interne ISDC au fost evaluate i
certificate la nivelul 3 de maturitate conform standardelor SEI ISDC fiind una
dintre puinele organizaii ce au obinut
aceast recunoatere n Romnia.
Asigurarea calitii este permanent n atenia tuturor de la ISDC deja
de mult vreme. n afar de dezvoltarea continu a proceselor i a tool-urilor
folosite exist o preocupare constant n
direcia mbuntirii factorului uman
din ecuaia calitii: se organizeaz sesiuni Continuous Improvement destinate
angajailor, iar QA Officers se ntlnesc
mereu, formal sau informal, cu oricine are
nevoie de un rspuns legat de asigurarea
calitii. Suntem vizitai cu regularitate
de consultantul nostru extern i sesiunile
organizate n aceste ocazii sunt deschise
tuturor. Chiar dac principalul proces
de dezvoltare al produselor noastre este
Scrum exist procese definite i pentru
alte arii de proces. De exemplu: project
planning; risk management; requirements
development and management, release
and configuration management, quality
management i lista poate continua. Prin
tot acest efort se ncearc reducerea
probabilitii apariiei crpaturilor n produsele noastre din cauza c vreun mic pas
a fost trecut cu vederea la un moment dat
i care se poate ntoarce mpotriva noastr
ntr-un moment nepotrivit. Desigur,
aceast posibilitate nu poate fi eliminat n
ntregime, dar depinde numai de noi s ne
asigurm c meninem aceasta la cel mai
sczut nivel posibil.

Bibliografie
1.

2.
3.

4.

CMMI for Development, version 1.3


Improving processes for developing
better products and services, November
2010,Technical report
http://agilemanifesto.org/
http://www.qpit.net/blog.html - o serie de
articole scrise de Peter Leeson, CMMI and
Process Improvement Lead Appraiser and
Instructor at Q:PIT Ltd.(http://www.qpit.net/
contact-us.html)
Quality Assurance - Making Process Work
Peter Leeson la ISDC, Mai 2014
5 http://www.sei.cmu.edu/

programare

Dezvoltarea aplicaiilor securizate n


Java

om ncepe acest articol cu cteva considerente generale despre securitate. Astfel,


scopul securizrii calculatoarelor este acela de a proteja informaiile existente pe
acestea de furt, de corupere sau dezastre naturale.

Silviu Dumitrescu

silviu.dumitrescu@accesa.eu
Java Line Manager
@ Accesa

Diana Blan

Diana.Balan@accesa.eu
Java developer
@ Accesa

Securitatea trebuie neleas ca o msur


existent este dificil i generator de erori.
de compromis. De exemplu, cea mai bun
Duplicarea: codul duplicat este posimetod de a face o aplicaie complet secubil a nu fi tratat consistent la copiere. Mai
rizat n Internet este s nu o conectm la
mult, aceasta violeaz i principiul prograInternet.
mrii Agile, Dont Repeat Yourself (DRY).
Unul dintre aspectele importante ale
Restricionarea privilegiilor: cnd
securitii este confidenialitatea, care reprecodul opereaz cu privilegii reduse, atunci
zint ascunderea surselor de informaii.
exploatarea defectelor este dejucat.
Mecanismele folosite pentru realizarea
Trust boundaries: stabilirea limitelor
confidenialitii sunt: ncriptarea, folosirea
ntre diferitele pri ale aplicaiei. Spre
parolelor i controlul accesului adic acordaexemplu, orice date care vin dintr-un
rea accesului la resurse unui numr limitat
browser web, ntr-o aplicaie web, trebuie
de persoane.
verificate naintea utilizrii.
Un alt aspect este integritatea, care
Verificarea securitii: efectuarea verinseamn c datele sunt protejate fa de
ficrilor de securitate n cteva puncte
modificri neautorizate. Aceasta este readefinite i returnarea unui obiect pe care
lizat de obicei prin autentificare. User-ul
codul client l reine, astfel nct s nu mai
trebuie s furnizeze credeniale (username
fie nevoie de verificri ulterioare.
si password). n plus, sistemele de detecie
ncapsularea: folosirea privat a
trebuie s fie folosite n cazul n care sisteinterfeelor i a cmpurilor i evitarea
mul de autentificare eueaz. Acest sistem
accesorilor.
este format din loguri de acces i pattern-i de
analiz.
Tipuri de ameninri de securitate
Un ultim aspect este disponibilitatea, care
Putem s mprim ameninrile n
reprezint abilitatea de a utiliza un sistem sau urmtoarele categorii:
o resurs la nevoie.
Injecia i incluziunea;
Cel mai simplu mod n care un sistem
Gestionarea resurselor (buffer overeste vulnerabil l reprezint atacurile de refuflow, denial of service)
zare a serviciilor. Acestea blocheaz accesul
Informaiile confideniale;
la sistem al utilizatorilor sau reduce nivelul
Accesibilitatea i extensibilitatea;
de performan al sistemului. Sistemul ar
Mutabilitatea.
trebui s fie att de flexibil nct s detecteze
aceste atacuri i s rspund la ele.
Injecia i incluziunea reprezint un atac
ce determin un program s interpreteze date
Aspecte de securitate la nivelul software- ntr-un mod neateptat. De aceea, orice date
urilor
venite dintr-o surs nesigur trebuie validate.
Orice sistem ce conine informaii Principalele forme de atac sunt:
confideniale este foarte probabil o int a
Cross-site scripting (XSS),
atacatorilor.
SQL Injection,
Cteva dintre conceptele fundamentale
OS Command Injection,
de securitate sunt:
String-uri formatate necontrolat.
API-uri securizate: este mult mai uor
s concepem un cod securizat nc de la
Vulnerabilitile XSS apar atunci cnd:
nceput. ncercarea de a securiza codul
date provenind din surse lipsite de
www.todaysoftmag.ro | nr. 33/martie, 2015

35

management
Dezvoltarea aplicaiilor securizate n Java
ncredere intr ntr-o aplicaie web.
aplicaia web genereaz dinamic o pagin web ce conine
date nesigure.
pe timpul generrii paginii web aplicaia nu previne datele
din coninutul executat de browser, precum JavaScript, tag-uri
HTML, atribute HTML, evenimente ale mouse-ului, Flash sau
ActiveX.
utiliznd un web browser, victima viziteaz pagina generat, ce conine un script maliios ce a fost injectat de date
nesigure.
script-ul care vine dintr-o pagin web ce a fost trimis de
serverul web, victima execut script-ul maliios n contextul
domeniului serverului web.
victima violeaz politica unui browser web, care spune c
script-urile dintr-un domeniu nu ar trebui s fie capabile s
acceseze resurse sau s ruleze cod ntr-un alt domeniu.
Urmtorul exemplu ilustreaz un atac XSS:
<%@page contentType=text/html
pageEncoding=UTF-8%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv=Content-Type
content=text/html; charset=UTF-8>
<title>Login Page</title>
</head>
<body>
<h2>Bine ati venit</h2>
<p>Va rog sa va logati</p>
<form method=GET
action=/XssExample/ProcessForm>
<b>Login Name: </b>
<input type=text size=12
maxlength=12 name=userName />
<br/>
<b>Password: </b>
<input type=text size=12
maxlength=12 name=password />
<br/>
<b>Locatia: </b>
<input type=text size=12
name=location /><br/>
<input type=submit value=Submit />
<input type=reset value=Reset />
</form>
<p><a href=http://localhost:8080/XSS/Pro
cessForm?userName=Bob&password=Smith&location=</
p>%3CScript%20Language%3D%22Javascript%22%3Ealert(%
22Ai%20fost%20atacat!%22)%3B%3C%2FScript%3E>Hacked
URL</a></p>
<p>URL Script text: %3CScript%20Lang
uage%3D%22Javascript%22%3Ealert(%22vei%20fi%20
atacat!%22)%3B%3C%2FScript%3E</p>
</body>
</html>

Respectiv servletul:
@WebServlet(/ProcessForm)
public class ProcessForm extends HttpServlet {
private static final long
serialVersionUID = -5014955266331211217L;
protected void processRequest(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(text/html;charset=UTF-8);
PrintWriter out = response.getWriter();
try {
out.println(<html>);
out.println(<head>);
out.println(
<title>Servlet de procesare</title>);
out.println(</head>);
out.println(<body>);
out.println(<h2>Prima pagina</h2>);
out.println(<p>sunteti logat ca: +

36

nr. 33/martie, 2015 | www.todaysoftmag.ro

request.getParameter(userName) + </p>);
out.println(<p>si sunteti in: +
request.getParameter(location) + </p>);
out.println(</body>);
out.println(</html>);
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String
getServletInfo() {
return Servletul meu;
}
}

SQL Injection se
bazeaz pe date nefiltrate pentru a modifica
rezultatele SQL. Fie
urmtorul cod:
ResultSet rs =
stmt.executeQuery
(SELECT * FROM
DEMO.Table1 WHERE
NAME= + nameParam + AND AGE
= + ageParam +
);

Dac atacatorul
trimite: valori
OR a = a,
acesta va face predicatul de selecie adevrat,
ceea ce este echivalent
cu:
ResultSet rs =
stmt.executeQuery
(SELECT * FROM
DEMO.Table1);

Prin aceasta atacatorul poate accesa informaii confideniale sau chiar modifica
date din baza de date. De aceea orice input trebuie filtrat nainte
de utilizare.
OS command injection se bazeaz pe date nefiltrate ce modific o comand a sistemului de operare.
Fie urmtorul exemplu:
public class ListHomeDir {
public static void main(String[] args) {
String userName = Silviu;
String curLine = ;
try {

Process p = Runtime.getRuntime().exec(

cmd /c dir C:\\Users\\ + userName);

BufferedReader stdInput = new
BufferedReader(new InputStreamReader(
p.getInputStream()));

BufferedReader stdError = new
BufferedReader(new InputStreamReader(
p.getErrorStream()));

TODAY SOFTWARE MAGAZINE


System.out.println(Home directory este:);
while ((curLine = stdInput.readLine()) != null) {
System.out.println(curLine);
}
if (stdError.ready()) {
System.out.println(eroare:);
}
while ((curLine = stdError.readLine()) != null) {
System.out.println(curLine);
}
System.exit(0);
} catch (IOException e) {
System.out.println(exceptie: );
System.out.println(e.getMessage());
System.exit(-1);
}
}
}

n exemplu dorim s obinem un listing al unui director.


Atacatorul poate trimite: username;&&del *.*;, ceea ce va
determina pierderea de date.
Fie urmtorul
e xe mplu de format necontrolat de
string-uri:
public class
Main {
static Calendar
c = new GregorianCalendar(1995,
GregorianCalendar.MAY, 23);
public static void
main(String[]
args) {String
param = %1$tY;

System.out.
printf(param +
nu se potriveste!
A fost emis in
ziua %1$te \n,
c);
}
}

billion laughs attack: dac utilizm API-ul DOM pentru


un document XML trebuie s ncrcm ntregul document n
memorie. Un atac ca acesta poate nghii ntreaga memorie.
XPath: este un limbaj pentru interogri i traversri
de documente XML. Unele interogri pot fi recursive i pot
returna un volum de date mai mare dect cel ateptat.
Object Graph: un obiect graf construit prin parsarea unui text sau a unui stream binar poate avea cerine de
memorie mult mai mari dect datele originale.
Fie urmtorul exemplu:

public class FileException {



Properties appProps = new Properties();

public static void main(String[] args) {

FileException app = new FileException();

app.readProps(AppConfig.properties);

app.printProps();
}

public void readProps(String fileName) {

try {

appProps.load(new FileInputStream(fileName));

} catch (IOException e) {

System.out.println(Nu putem gasi fisierul +

de configurare: + e.getMessage());

e.printStackTrace();

System.exit(-1);
}
}
public void printProps() {
appProps.list(System.out);
}
}

Sistemul nu ar trebui s furnizeze potenialilor atacatori


locaia exact a fiierului de configurare al aplicaiei.
Informaiile confideniale ar trebui s fie disponibile spre
citire doar ntr-un context limitat, s nu fie disponibile pentru
manipulare, s se furnizeze utilizatorilor doar informaiile de care
au nevoie, informaiile s nu fie hard cod-ate n surse.
Datele confideniale nu ar trebui incluse n excepii sau fiiere
de log. De asemenea, nu ar trebui s hard cod-m username-ul
i parola n codul surs. Ar trebui folosit un fiier de proprieti
pentru a stoca acest tip de informaii.
n acest cod proDm mai jos un exemplu de creare i folosire a unui fiier
gramatorul ncearc de log.
s printeze rezul- public class BasicLogging {
tatele atunci cnd
Logger logger = Logger.getLogger(com.example.
dou valori nu se BasicLogging);
potrivesc. Problema
public void logMessages(){
logger.severe(A aparut o problema severa);
poate apare atunci
logger.warning(Avertisment);
cnd este trimis un
logger.log(Level.INFO,Informatie utila);
logger.config(Informatii despre CONFIG);
string format n loc de lun. Atacatorul i poate da seama de an,
}
spre exemplu, atunci cnd un card expir.
public static void main(String[] args) {
Din punct de vedere al managementului de resurse avem:
BasicLogging bl = new BasicLogging();
buffer overflows: copierea unui buffer de intrare ntr-un
bl.logger = Logger.getLogger(com.example+
.BasicLogging);
buffer de ieire fr verificarea dimensiunii. Are ca rezultat
faptul c un atacator poate executa cod n afara unui program
try {
bl.logger.addHandler(new FileHandler(
normal. Java este imun la acest tip de atac deoarece deine un
Basic.log));
management automat al memoriei.
bl.logger.setLevel(Level.INFO);
bl.logMessages();
denial of service: este nc posibil n Java prin folosi} catch (IOException e){
rea nepotrivit a resurselor. Iat cteva exemple de atacuri
e.getMessage();
}
poteniale denial-of-service:
}
zip bomb: un fiier zip ce este relativ mic, dar care }
include multe alte zip-uri n el. De-zip-area fiierelor poate
V dorim lectur plcut i ateptm cu interes ntrebrile
bloca procesorul i nghii un spaiu mare de memorie. Ca voastre!
msur de protecie putem limita dimensiunea i procesarea
ce pot fi fcute ntr-o resurs ca aceasta.
www.todaysoftmag.ro | nr. 33/martie, 2015

37

management

programare

Abordare simpl a riscului n Scrum

Sebastian Boti

Sebastian.Botis@endava.com
Delivery Manager
@ Endava

38

nr. 33/2015 | www.todaysoftmag.ro

n modelul tradiional waterfall, riscurile sunt de obicei detectate i analizate


folosind metode tradiionale de management. n zilele noastre, exist o oarecare
deficien n ceea ce privete identificarea i prevenirea riscurilor n dezvoltarea de
software care urmeaz principiile Agile. Modele Agile susin faptul c trateaz riscurile
implicit. Prin modul n care este definit conceptul, abordarea sa iterativ favorizeaz o
atenie deosebit la riscuri, care pot fi reduse prin diferite practici, cum ar fi continuous
software integration. Din pcate, n realitate, modelele de tip agile implementeaz doar
cteva practici din zona de risc al managementului.
Aceast stare de fapt a impus necesitatea punerii n aplicare a unor remedii.
Un prim demers a fost s se obin opinia unor manageri de proiecte implicai
n managementul diferitelor proiecte din
toate zonele lumii. n rndurile urmtoare,
vom oferi o analiz referitoare la un chestionar axat tocmai pe aceast problem, care
a fost lansat nu cu mult timp n urm.
Managementul de riscuri este o disciplin care se ocup cu identificarea,
monitorizarea i limitarea riscurilor.
Managementul de risc ideal/eficient este
considerat acela care stabilete o ierarhie
a gravitii riscurilor. Se acord prioritate
riscurilor care ar cauza mari pierderi i care
implic o frecven ridicat de apariie. n
ordine descresctoare, vor fi vizate riscurile cu probabilitate mai mic de a aprea
i cu efecte mai puin dezastruoase.
Efectiv, managementul de riscuri
implic urmtoarele:
Identificarea riscului.
Analiza fiecrui risc pentru a determina nivelul efectelor negative.
Ierarhizarea riscurilor identificate
n funcie de frecven i de gravitatea
consecinelor.
Crearea planurilor de aciuni (rspunsuri) pentru a aborda riscurile cu
prioritatea cea mai mare.

Monitorizarea continu pentru a ne


asigura c planul de aciuni d rezultate.
Managementul de risc n procesele
agile este similar celui din managementul
convenional al riscului, cu mici variaii. O
prezentare elocvent a ceea ce presupune
managementul de risc ar trebui s rspund la dou ntrebri eseniale:
Ar fi bine ca riscurile s fie monitorizate doar la nivel de iteraie? Rspunsul
este Nu.
Este necesar s monitorizm riscurile la nivel de proiect? Rspunsul este
Da.
Considerm c managementul de risc
n agile ar trebui s fie fcut la dou nivele
: de proiect i de iteraie.
Procesul de risc management la
nivel de proiect este realizat prin luarea
n considerare a datelor generale de proiect i a cerinelor acestuia.
Procesul de risc management la
nivel de iteraie este fcut lund n considerare detaliile ce in de fiecare iteraie
n parte.
Aceste dou procese par a fi separate,
dar ele merg mn n mn pe durata de
execuie a proiectului.

programare

TODAY SOFTWARE MAGAZINE

Este necesar s nelegem, s identificm, s monitorizm i


s reducem riscurile la cele dou nivele. Managementul de risc
la nivel de proiect ar oferi date de intrare pentru managementul
de risc la nivel de iteraie. S lum aminte c nu toate riscurile de
la nivelul proiectului, sunt parte din riscurile la nivel de iteraie.
Unele riscuri pot fi diferite i altele pot fi unice doar la nivelul
iteraiei. Monitorizarea riscurilor se face n timpul iteraiei, iar
sesiunile de analiz a riscurilor ar trebui s aib loc ntre iteraii.
Se recomand ca situaia riscurilor la nivel de iteraie i de proiect
s fie foarte bine cunoscut.

Lista de verificare

Cred c fiecare manager de proiect, Scrum master i echip,


ar trebui s neleag cerinele pentru a nelege riscurile majore
care pot aprea ntr-un proiect. Cel mai probabil, crearea unei
liste de verificare (una similar se poate gsi mai jos) care ar putea
ajuta la identificarea potenialelor riscuri, reducerea lor nc din
stadiile iniiale sau planificarea unor aciuni de atenuare a lor, ar
reduce cu mult costurile proiectului.
Zona
Cerine
Cerine
Design

Design

Proces

Proces

Proces

Managementul
iteraiilor

Descriere
Sunt cerinele pregtite?
Product Owner-ul a identificat scopul proiectului?
Designul i arhitectura sunt deja
stabilite sau vor fi analizate ntr-o
iteraie separat?
Designul i arhitectura sunt determinate i echipa a neles acest
aspect?
Echipa a mai fost implicat n
traininguri Agile nainte? n caz
negativ, este necesar?
ntreaga echip este pregtit i
a neles Agile-ul nainte de a fi
implicai n proiect?
Scrum master-ul a neles matricele
care ar trebui folosite n proiectele
de tip Agile?
Scrum master-ul este informat despre cerinele din backlog?

Da/Nu

Managementul
iteraiilor

Scrum master-ul tie de metodologia de estimare n Agile?

Managementul
Iteraiilor
Infrastructur

Exist un tool care poate fi folosit n


managementul activitilor?
Infrastructura este pregtita pentru
execuia proiectului?
Exist un canal de comunicare
asupra cruia ai czut de-acord
n cazul n care echipa este global
distribuit?

Infrastructur

Lista de verificare pentru riscuri creat naintea unei edine,


poate fi folosit pentru o mai uoar identificare a acestora. n
timpul edinelor, toate riscurile sunt identificate, discutate i se
ajunge la un consens asupra aciunilor ce se vor lua pentru aplanarea acestora. Lista riscurilor la nivel de proiect i lista riscurilor
la nivel de iteraie sunt create i fcute cunoscute n interiorul
echipei, i vor fi meninute i completate pe parcursul proiectului
i a iteraiei.
Managerul de proiect i/sau Scrum Masterul au obligaia s
menin aceste artefacte.

Managementul riscurilor la nivel de proiect

Procesul de management al riscurilor la nivel de proiect


include identificarea riscurilor, planificarea, monitorizarea i
activitile de nchidere a riscurilor, de la sfritul unui proiect.
Fiecare din aceti pai are importana sa, explicat n continuare.

Identificarea riscurilor

La nceputul unui proiect, riscurile proiectului sunt identificate dintr-o perspectiv larg. Lista de verificare (dac se creeaz)
ar putea fi de ajutor n identificarea acestora.

Planificarea riscurilor

n timpul edinei de planificare, planurile de atenuare ale


riscurilor identificate sunt prezentate. Lista riscurilor la nivel de
proiect este creat de managerul de proiect / scrum master, i
echipa se poate servi de aceast list la nevoie. Aceast activitate
se face numai la demararea proiectului, iar lista de riscuri este
actualizat pe parcursul derulrii ntregului proiect.

www.todaysoftmag.ro | nr. 33/martie, 2015

39

management

testare
Abordare simpl a riscului n Scrum

Monitorizarea riscurilor

Toate riscurile identificate anterior, sunt revizuite i monitorizate n sesiunile dintre iteraiile proiectului. Lista de riscuri este
actualizat, marcndu-se acele riscuri care s-au nchis, sau adugndu-se riscuri noi identificate pe msura naintrii proiectului.
Aceste informaii sunt apoi folosite n sesiunile dintre iteraii.

Managementul riscurilor la terminarea proiectului

Lista riscurilor ar trebui actualizat cu diferite detalii despre


ceea ce s-a ntreprins n momentul n care echipa s-a confruntat
cu diferite riscuri pe parcursul proiectului. Aceasta list ar fi un
bun punct de plecare n alte proiecte viitoare. De asemenea, documente cu cele mai bune practici i cu diferite concluzii ar putea fi
create i distribuite ntre proiecte i echipe.
n imaginea de mai jos se poate observa procesul de management al riscurilor ntr-un mediu de dezvoltare Agile:

Procesul de management al riscurilor la nivel de iteraie

Acest proces ncepe chiar dup prima sesiune de identificare


a riscurilor la nivel de proiect. La nivel de iteraie, managementul
riscurilor implic mai multi pai. n mare, sunt dou procese pe
parcursul unei iteraii, identificarea i planificarea la nceputul
iteraiei, i monitorizarea, pe tot parcursul iteraiei.

Startul iteraiei
La nceputul unei iteraii, o edin despre managementul riscurilor este programat. Aceast edin este structurat n mai
multe etape ca: nelegerea, identificarea, analiz, prioritizarea
i maparea riscurilor. Fiecare etap are semnificaia ei. Aceast
discuie ar trebui s dureze 2 - 3 ore i ar trebui s includ toat
echipa. Concluziile discuiei similare la nivelul proiectului pot fi
folosite ca puncte de pornire pentru aceasta discuie.
Fiecare etap este detaliat mai jos.

ar putea ncepe procesul de identificare a riscurilor. n timpul


sesiunii, fiecare membru al echipei ar trebui s identifice riscurile
poteniale. Sunt multe metode de a modela aceast sesiune, iar
un mod simplu i eficient ar putea fi ceva similar cu identificarea
cerinelor unui proiect folosind post-it-uri . Ca o regul de urmat,
n aceast sesiune, nu ar trebui adresate ntrebri i nici nu ar
trebui se creeze discuii pe marginea cerinelor. De ce? Deoarece
aceast sesiune are un anumit timp fix alocat, care nu ar trebui
depit.
Analiza: n aceast etap, colaborarea ntre membrii echipei
va avea un rol foarte important. Fiecare risc identificat trebuie
analizat i clasificat ntr-o o categorie logic sau arie. De exemplu:
infrastructura, proces, dependine externe, etc. . n timpul acestui
proces, fiecare risc este cuantificat i i se d o valoare (scala nu
este predefinit, dar ar trebui s fie simpl). Odat clasificarea terminat, riscurile de aceeai categorie sunt grupate i valorile lor
nsumate. n locul valorilor nominale, o alt
posibilitate de a grupa riscurile ar fi pe baza
unor probabiliti de apariie, sau al valorii
impactului riscului respectiv.
Stabilirea ierarhiei riscurilor : n
momentul n care toate riscurile sunt clasificate i evaluate, acestea sunt ordonate
descresctor, ncepnd cu grupul cu cea
mai mare valoare n fruntea listei. Pentru o
iteraie, luai primele trei grupuri i amnai
discuiile despre restul grupurilor pentru o
alta edin viitoare. Pe parcursul execuiei
unei iteraii, versiunea precedent a listei
riscurilor (actualizat n timpul iteraiei precedente) este consultat pentru a identifica
riscurile care nc sunt prezente. Acest proces
va fi repetat pn la finalul proiectului.
Maparea: maparea este un exerciiu rapid
care se face nainte de a da startul iteraiei.
Primele cinci cele mai importante riscuri
sunt mapate cu cerinele din backlog. Acest lucru este esenial
pentru ca riscurile s fie foarte atent urmrite n timpul n care
cerinele sunt implementate. Dac nu s-a creat un backlog, acum
e momentul s fie creat. Apoi ar trebui creat i lista riscurilor
din iteraie, mpreun cu un plan de atenuare i un plan de rspuns pentru fiecare din riscurile identificate. Aceast list va fi un
punct de referin pentru echip, pe tot parcursul iteraiei. Acest
document este meninut i actualizat n timpul execuiei iteraiei.
Poza de mai jos arat procesul uzual de management al riscurilor la nivel de iteraie, detaliind paii implicai.

nelegerea: echipa ar trebui s aib o imagine foarte clar


asupra cerinelor de funcionalitate ct i a celor non-funcionale.
nelegerea cerinelor poate fi foarte folositoare n procesul de
identificare a riscurilor la nivel de iteraie.
n timpul iteraiei
Identificarea: din momentul n care avem o prim versiune a
Monitorizarea este cheia procesului de management al risbacklog-ului produsului i o bun nelegere a cerinelor, echipa curilor. Aceasta trebuie s existe pe parcursul ntregii execuii a

40

nr. 33/martie, 2015 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


iteraiei. Echipa rspunde i reacioneaz la riscuri cum i cnd
apar n timpul execuiei, dar i pe baza listei de riscuri. Scrum
master-ul/managerul de proiect ine o eviden a fiecrui risc
din iteraie. n cazul n care un risc amnat iniial totui apare n
iteraia curent, acest risc trebuie s fie parte din iteraia urmtoare. Nu trebuie s pierdem din timpul acestei iteraii pentru
riscurile amnate, doar dac acele riscuri devin att de critice
nct este necesar s fie cercetate n iteraia curent.

Sondaje
Anul trecut, mai multe sondaje s-au efectuat n ntreaga lume,
implicnd diferii manageri de proiect de la companii mai mari
sau mai mici, despre riscuri i managementul acestora. Am gsit
recent un sondaj interesant din Europa de Est, incluznd aproxi- Concluzii
mativ 70 de manageri de proiect, cu obiectivul de a afla care sunt
Exist foarte mult informaie i foarte multe detalii despre
practicile uzuale relative al managementul riscurilor din manage- instrumente specifice folosite n identificarea, clasificarea (pe
mentul Agile al proiectelor.
baza unor indicatori cantitativi sau calitativi), i monitorizarea
riscurilor n timpul iteraiilor.
Rezultatele au fost urmtoarele:
Chiar dac utilizarea metodelor Agile reduce riscurile nc
67% din respondeni analizeaz riscurile proiectului din fazele iniiale ale dezvoltrii de software, trebuie s lum n
sptmnal.
considerare tendina actual de a include timp ntr-o manier
87% din respondeni susin c managerul de proiect este cel mult mai formalizat i pentru managementul riscurilor.
responsabil de managementul riscurilor.
27% din respondeni au susinut c n acelai timp, i proRisc este pauz n livrare, nu muncitori inactivi - Ken Rubin
duct owner-ul este responsabil de managementul riscurilor.

Resurse

Respondenii au fost ntrebai cine este responsabil principal 1.


de identificarea riscurilor. Rspunsurile au fost: echipa proiectu- 2.
lui i membrii ei (80%), managerul de proiect (67%), echipa de
dezvoltare i membrii ei (40%) i scrum master-ul (40%).
3.
n acelai timp, 73% din respondeni folosesc o list de riscuri pentru documentare, analiz i mentenan, iar restul de 23%
folosesc o alt tehnic de monitorizare sau nu documenteaz riscurile n nici un mod.
Respondenii au fost ntrebai i care sunt atributele riscurilor
pe care le documenteaz i le in sub observaie. Rspunsurile se
pot vedea n graficul de mai jos. Respondenii au fost ntrebai
care din ceremoniile din Scrum este cea mai potrivit / folosit
pentru a discuta riscurile cu echipa de development. Rspunsurile
lor se pot vedea n graficul urmtor.

Risk Management in Agile Model Monika Singh & Ruhi Saxena


Project Risk Management model based on Prince2 and Scrum
Frameworks Martin Tomanel and Jan Juricek
Three Key Agile Risk Management Activities Ken Rubin

www.todaysoftmag.ro | nr. 33/martie, 2015

41

design

Importana realizrii de prototipuri

n urm cu civa ani, mai exact n anul 2011, am obinut primul job ca UX Designer la o companie multinaional. De atunci
i pn n prezent am avut oportunitatea s lucrez cu diferite metodologii de dezvoltare ale unui design, reuind s descopr
plusurile i minusurile fiecreia.

n momentul de fa am ocupaia de
Dezvoltnd ideea, fiecare iteraie are
de implementare cu specificaii clare i
UX Designer ntr-un mediu Agile, ntr- caracteristicile sale:
complete i se transform n cele din
o echip de 17 designeri, care au ca scop
a. Prima iteraie este ntotdeauna
urm n produsul dorit de beneficiar.
principal livrarea celei mai bune experiene
partea n care se colecteaz toate
utilizatorilor, prin produsele software dezinformaiile necesare de la experii din
voltate de ctre companie.
domeniu asupra produsului pentru
Mediul mereu inovator n care am
care urmeaz s creez designul. Toate
ansa s lucrez i libertatea de a experiinformaiile sunt reverificate i de echip
menta diverse metodologii, mi-au permis
din punct de vedere tehnic. Apoi stabis ncerc noi procedee de a dezvolta un
lim ce funcionalitate se dorete, pentru
Iteraii n conceperea unui prototip
design. Comparnd cu metodele utilizate
ca ulterior s trasez prima schi a viin trecut, am decis ntr-un final s m
torului produs i s stabilesc flow-ul n
F i e c are d e s i g ne r are propr i i l e
opresc asupra uneia singure, pe care o concare designul proiectului se va desfura. preferine n ceea ce privete tool-urile de
sider cea mai bun pentru a livra un design
b. Urmtorul pas, iteraia a doua, se care se folosete pentru ndeplinirea taskde succes: utilizarea prototipurilor.
concentreaz n special pe interaciunea urilor i realizarea prototipurilor. Personal,
Aadar, consider c realizarea unui
utilizatorului cu prototipul i pe vali- eu prefer utilizarea tool-ului Axure pentru
produs trebuie s nceap mereu cu un
darea funcionalitii stabilite n prima a crea prototipuri i creionul i coala de
prototip, indiferent c produsul este de tip
iteraie. Ce urmrim n special n aceast hrtie ori de cte ori am nevoie s trasez
software sau de tip hardware. Prototipul
iteraie este modul n care prototipul o idee rapid. De ce Axure? Pentru c se
este cel care d o idee clar, o previzualieste utilizat de ctre publicul int, mai poate dezvolta cu ajutorul su un prototip
zare exact a produsului final. Prototipul
exact punem o prim versiune a acestuia html care va evolua ntr-un mod organic
este o clon, este un screenshot al produsula dispoziia sa i analizm modul de de la schie simple, n prima iteraie, la un
lui viitor, care va deveni complet funcional
interaciune. Urmrim dac utilizatorul prototip interactiv, cu design complet, gata
dup finalizarea implementrii.
se simte confortabil cu poziia anumitor de user-testing i implementare.
Pentru mine nu exist nici o excepie
elemente grafice, dac este obositor penTotui, tool-ul cel mai bun este cel alde la aceast regul. Pentru fiecare protru utilizare ndelungat, dac identific turi de care te simi cel mai confortabil i
iect la care lucrez, pornesc de la o idee de
uor componentele eseniale, etc. .
cu care i poi realiza designurile ntr-un
ansamblu, proiectat pe o bucat de hrtie,
c. n final, n ultima iteraie a pro- timp rezonabil. Ceea ce conteaz cu adevajungnd pn la momentul n care pot s
cesului de design, concentrarea este rat este rezultatul final, un design uor de
furnizez un prototip al produsului final, n
asupra detaliilor vizuale i a finis- neles, utilizabil i implementabil.
cele mai mici detalii, indiferent c acesta
rii detaliilor prototipului realizat.
Realizarea unui prototip are doar
este o machet interactiv a unui website
Prototipul primete forma comerci- avantaje i din experienta mea cu diverse
sau o simulare 3D a unui obiect.
al, prin elemente grafice complexe i modaliti de lucru, este o metod preferaProcesul se desfoar n iteraii, cu
repoziionarea componentelor, dac bil n detrimentul realizrii unui produs
fiecare iteraie prototipul cptnd mai
este necesar, pe baza feedbackului rezul- pe principiul mergem nainte, implemenmulte detalii, devenind mai puternic,
tat din analiza interaciunii utilizatorilor tm din mers i mbuntim pe parcurs.
pn n momentul n care este considerat
cu acesta. Colectarea acestui feedback Beneficiarul produsului va ti exact ce
funcional i gata pentru implementare.
este esenial, ntruct, n momentul n intr n producie i ce va primi la finalul
care designul este validat, trece n etapa acesteia.

42

nr. 33/martie, 2015 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


Voi detalia cinci dintre multiplele ca acesta s cunoasc faptul c este analiavantaje ale utilizrii unui prototip:
zat. Comportamentul su n interaciunea
cu produsul va fi natural i realist, diferit
1. Simuleaz produsul real
de atunci cnd este invitat la o sesiune de
Cel mai important avantaj al unui user testing, sesiune n care ar ti c este
prototip este acela c simuleaz produ- analizat.
sul real i viitor. Cu ajutorul acestuia se
Cu toate acestea, user testing-ul n care
pot atrage clieni care s investeasc n utilizatorul este monitorizat live este cea
produs, nainte de a aloca orice resurs mai bun metod n a depista problemele
necesar implementrii. Se poate testa cu care se confrunt acesta, deoarece exist
corectitudinea designului nainte ca acesta posibilitatea de a culege ct mai multe
s ajung n producie i se pot descoperi feedbackuri i s vedem unde greete n
erori de proiectare, evitnd compromite- ndeplinirea task-urilor de utilizare. n
rea ntregului proiect. De asemenea, un cadrul mediului nostru de lucru mereu
prototip pus la dispoziia unui eantion de includem n procesul de design aplicautilizatori ajut la descoperirea din timp rea de survey-uri potenialilor utilizatori
a modului de interaciune al acestora cu n legtur cu produsul ce urmeaz a fi
produsul i se cunosc ateptrile lor.
dezvoltat. Dintre respondeni, i selectm pe aceia care ar avea cea mai mare
2. Provoac la crearea de idei noi
tangen cu produsul dezvoltat i care
Fiecare persoan are propria viziune au bifat opiunea pentru disponibilitate
asupra produsului ce urmeaz a fi imple- de a participa la sesiunile de usability tesmentat i, n principiu, dorete ca aceast ting. Aceste sesiuni se desfoar online.
viziune s se regseasc n produsul final. Fiecare utilizator partajeaz propriul
Expunerea prototipului ajut la o unifor- ecran, pentru a ne demonstra modul n
mizare a tuturor ideilor i d posibilitatea care interacioneaz cu prototipul, rolul
beneficiarilor s vad produsul dintr-o nostru fiind de a depista acele seciuni ale
alt perspectiv, s l vad materializat i designului unde ntmpin dificulti. n
s ofere un feedback mai concentrat pe funcie de informaiile colectate din aceste
detaliile dorite, pe ceea ce iniial aveau sesiuni, modificm prototipul i organin minte. ncepnd de la un prototip low- zm ulterior alt sesiune de testare.
fidelity care este axat pe flow-uri i care
direcioneaz utilizatorul spre review-uri 4. Planificare
ale funcionalitii, se ajunge n cele din
Echipele care implementeaz desigurm la un prototip high-fidelity unde nul primesc informaii eseniale care i
se obine feedback privitor la detaliile ajut s planifice ceea ce trebuie s implede modelare vizual, cum ar fi fonturile, menteze. Un prototip poate fi considerat,
culorile, alinierile, mrimea butoanelor, cel mai adesea specificaia proiectului i
etc.. Feedbackul este esenial pentru a des- ajut ntreaga echip s creeze user stories
coperi care sunt necesitile i ateptrile i s se concentreze asupra necesitilor
utilizatorilor, cerinele de business i pen- utilizatorilor.
tru a avea o idee clar a direciei n care se
Dac acesta este realizat la timp, nandreapt produsul.
intea nceperii unui Sprint, va aduce
doar beneficii n echipele de Scrum.
3. Previne orice problem major
Din experiena mea, am observat c
Conceperea unui prototip care poate deinerea unui prototip interactiv ajut
fi supus ct mai rapid testrii permite programatorii care se ocup de implerezolvarea problemelor majore nainte ca mentare s aib o idee mult mai clar
acestea s provoace pagube financiare, asupra modului n care trebuie s conceap
dac ar ajunge n producie. Prin punerea interaciunea componentelor designului.
prototipului la dispoziie unor utilizatorii Prin prototip se comunic mult mai clar
reali pentru testare, se obin n avans toate ceea ce am dori s se implementeze n
sugestiile i ateptrile, naintea intrrii realitate, materializndu-se viziunea din
produsului n producie.
prima iteraie.
Dintre multiplele metode de a depista
problemele cu care se confrunt utiliza- 5. Este rapid i uor de creat
torii, Google Analytics spre exemplu, un
Chiar i un beneficiar al produsului
tool folosit foarte des de ctre mine, ofer poate ajuta la dezvoltarea unui prototip.
posibilitatea de a interpreta datele de Esenial este s furnizeze o simpl idee pe
utilizare ale unui produs de ctre un uti- hrtie, pentru ca designerul s neleag
lizator aflat n spaiul su confortabil, fr funcionalitile i logica produsului. Acest

simplu sketch, care, de exemplu, poate fi


o ilustraie cu cteva butoane pentru un
website, va fi transformat de un designer
experimentat ntr-un produs complex,
extrem de detaliat, gata spre a fi aprobat
pentru implementare.

Concluzie

Am ncredere c acest articol a adus


un plus de valoare asupra conceptului de
prototip n cadrul produciei software,
demonstrnd ct este de important a-l
avea. Impactul su asupra produsului final
este fenomenal. Nu doar c previne orice
problem major n cadrul produciei i
protejeaz compania de costuri neprevzute, dar duce i la o eficientizare a muncii,
formeaz o imagine de ansamblu a tuturor
prilor implicate (programatori, ingineri
de testare, product owner-i, beneficiari) i
de asemenea, este o resurs excelent care
poate fi folosit n pre-sales.

Ctlin Timofti

ctimofti@sdl.com
UX Designer
@ SDL

www.todaysoftmag.ro | nr. 33/martie, 2015

43

programare

Java Chronicle n aciune

rocesarea fiierelor relativ mari nu este o operaie att de uoar care s poat fi realizat prin apelul la instrumente, care au
tradiie n aceste chestiuni, precum Hadoop, maini foarte puternice, librrii pentru concuren, altele dect cele standard Java.
Folosirea acestora are drept efect costuri suplimentar de timp, de bani i de personal specializat.

De exemplu, dac n timpul procesrii trebuie s validezi pri


din coninut cu ajutorul unui serviciu extern i folosim Hadoop-ul
pentru procesarea fiierului, se demonstreaz c aceast practic
este greit. Toate informaiile cu care interacioneaz procesul ar
trebui s fie parte din HDFS.
Folosirea mainilor mai puternice (virtuale sau fizice scalare
orizontal) este un subiect destul de sensibil, pentru c unii clieni
nu doresc s plteasc sume mai mari de bani doar pentru a face
o singur funcionalitate s fie mai rapid, care de multe ori nici
nu este prea des folosit.
Utilizarea tehnologiilor pentru concuren nc reprezint un
impediment destul de mare, chiar i cu noile abstractizri care ne
sunt puse la dispoziie precum tehnologiile bazate pe conceptul
de actori. Lucrurile nu s-au simplificat ci au devenit mai neclare
deocamdat.Din pcate, trendul este s nelegem/cunoatem ct
mai puin din aceste librarii, chiar i din pachetul de concuren
pus la dispoziie de Java.
tiu c pentru unii, realizarea acestei funcionaliti e deja
clar: citirea fiierului linie cu linie, o procesm, apoi salvm
starea folosind clase de baz din Java. Banal! notez aceast idee
de aciune cu 1.

Soluia aplicat:
Chronicle. Java Chronicle.
Ce dorete s fie acest tehnologie:
Comunicare ntre procese ( IPC ) cu laten foarte mic de sub o
milisecund i capabil s salveze fiecare mesaj.

Img. Schema pentru model de utilizare - Chronicle-Queue (2015)

Schema noastr de utilizare:

Dar ateptai, aceasta nu e tot


Dac adaug ca procesarea s fie o aciune de tipul totulsau-nimic, unde avem proces de validare pentru fiecare linie n
parte, contorizri ale lor, alte detalii din antet sau subsoluri chiar
i grupuri de entiti, adic grupuri de linii care de fapt reprezint o singur entitate. Apoi, dac fiierul e validat cu cerinele
specifice fiecrei funcionaliti, salvm entitile create pentru
fiecare linie, sau grup de linii. Cu noua cerin observm c ideea
notat cu 1, nu ne mai ajut pentru c mai nti trebuie s validm fiierul, iar dac acesta e valid, atunci s salvm datele create
pe baza lui. Salvarea pe heap a datelor cu dorina de a le persista
la final reprezint o soluie pentru fiierele mici - dar totui s
nu uitm c ntr-o aplicaie multitenancy resursele fizice trebuie atent distribuite astfel c memorarea lor temporar poate
cauza OOME (JVM-ul rmne fr resurse, ceea ce cauzeaz ca
aplicaia s fie oprit) pentru fiierele mai mari (de ex. > 500 MB).

44

nr. 33/martie, 2015 | www.todaysoftmag.ro

Proces:
1. creeaz cronica (IndexedChronicle).
ChronicleConfig config = ChronicleConfig.DEFAULT.
clone();
Chronicle entitiesChronicle = new
IndexedChronicle(path, config);

2. citirea liniilor din fiier.


3. deserializarea liniilor (folosind tehnologia BeanIO nu
intr n scopul acestui articol) n POJO.
4. validarea entitii citite (n funcie de tip).
5. crearea de entiti adiacente (legate de logica aplicaiei)

TODAY SOFTWARE MAGAZINE


folosind detalii din entitatea citit anterior.
6. serializarea (BytesMarshallable) entitatii/entitilor :
public void writeMarshallable(@NotNull Bytes out)
{
if (null == entityUuid) {
out.writeBoolean(false);
} else {
out.writeBoolean(true);
out.writeUTF(entityUuid.toString());
}

writeListEntityMessages(messages, out);
out.writeStopBit(-1);
}

7. scrierea lor n cronic (ExcerptAppender):


// Start an excerpt with given chunksize
int objectSize = getObjectSize(entity); //how many
bytes
entitiesAppender.startExcerpt(objectSize);
// Write the object bytes
entity.writeMarshallable(entitiesAppender);
// pad it for later.
entitiesAppender.position(objectSize);

ntruct un numr poate exprima mai mult dect o mie de


cuvinte, rezultatele sunt n tabelul de mai jos. inerea acestor
entiti n memoria heap nu este ceva realizabil pe hardware ieftin, dar memorarea folosind chronicle-queue devine ceva trivial.

Concluzii

Dup cum se poate observa,timpul necesar pentru scrierea i


citirea din cronic (memory-mapped file) dureaz aproximativ ct
citirea fiierului. Aadar, dac optai s citii fiierul nc o dat
(dup validare) i s folosii chronicle, serializarea i deserializarea
obiectelor vin fr alt cost, ntruct timpii de mai sus includ acest
lucru. n plus, a durat doar dou ore pn am avut capacitatea s
salvam entitile n cronic, deoarece API-ul e foarte simplu de
utilizat i neles.
Versiuni mai noi ale librriei aduce funcionaliti mai
specializate:
chronicle queue,
chronicle map,
chronicle logger,
chronicle engine,
chronicle set.

8. citirea fiierului dac toate condiiile sunt trecute cu succes.


Este evident c exista muli ali factori care ar trebui luai n
9. citim din cronica (ExcerptTailer):
considerare, dar bazat pe nevoile noastre, aceast soluie este scalabil i a fost aplicat cu cel mai mic efort.
ExcerptTailer reader = entitiesChronicle.createTailer();
Entity entity = new Entity ();
entity.readMarshallable(reader);

10. deserializm:
public void readMarshallable(@NotNull Bytes in)
throws IllegalStateException {
StringBuilder valueToRead = new StringBuilder(100);
boolean hasId = in.readBoolean();
if (hasId) {
entityUuid = readUuidValue(valueToRead, in);
}

messages = readListEntityMessages(in);
in.readStopBit();
}

Vasile Mihali

vasile.mihali@arobs.com

11. salvm entitile i alte stri n Cassandra:


12. nchidem i tergem cronica:

Senior Software Engineer


@ Arobs

entitiesChronicle.close();
entitiesChronicle.clear();

Nr. linii

Citire linii Entitate (de baz)


(millis)

FileEntity
(adiacent)

BusinessEntity1 BusinessEntity2 S c r i e r e n C i t i r e d i n
(adiacent)
(adiacent)
c ron i c c ron i c
(millis)
(millis)

1068107 (~200M)

850

5000

5000

5000

5000

918

350

2136214 (~400M)

1312

10000

10000

10000

10000

1290

448

12817284 (~2.3G)

7423

60000

60000

60000

60000

5071

1530

25634568 (~4.7G)

13382

120000

120000

120000

120000

9026

3154

CPU Intel i5-2410M @2.3GHz, 16GB Ram, JVM - 1GB

www.todaysoftmag.ro | nr. 33/martie, 2015

45

programare

Apache Cassandra, Primii Pai

fost o vreme cnd tehnologiile NoSQL erau considerate un trend, un termen la mod, n esen ceva care nu era aplicabil n
viaa de zi cu zi. n ziua de azi ns, cred c NoSQL nu mai reprezint o moda i chiar i companiile de dimensiune medie
se confrunt cu problema volumului cresctor de date. n aceast situaie, scenariul migrrii de la o baz de date relaional
la una de tip NoSQL devine tot mai comun datorit avantajului principal al acestor tehnologii: posibilitatea de a scala aplicaiile n
clustere.
cqlsh:demo>

Acest articol va prezenta cum se instaleaz o baz de date de cqlsh:demo> select * from users where id = 1;
tip Cassandra i cum se poate crea un cluster Cassandra prin adid | name
ugarea mai multor noduri. Vom vedea cum se utilizeaz linia de ----+-----1 | John
comand, cum arat limbajul de interogare (CQL) i un exemplu
de clas Java care folosete un client API Cassandra. n final vom (1 rows)
discuta despre limitrile acestei soluii NoSQL, modul cum acestea pot fi depite i cteva recomandri generale.
Singurul aspect necunoscut din exemplul de mai sus ar trebui
s fie conceptul de keyspace care se aseamn cu schema din baza
Cum se instaleaz Cassandra
de date Oracle i conine informaii despre cum trebuie replicate
Baza de date Cassandra este una din cele mai utilizate baze datele n cluster-ul de Cassandra.
de date NoSQL oferind cele mai bune rezultate pentru scalarea
performanei i posibilitatea de a distribui n mod partiionat setul Clustere Cassandra
de date pe nodurile din cluster n mod gratuit (licena Apache
Pentru a putea scala performana unei aplicaii, Cassandra
2.0). Urmtorul grafic creat de compania DataStax compar 5 permite configurarea de clustere de noduri Cassandra. Prin utilidin cele mai utilizate soluii NoSQL din care reiese performana zarea cluster-elor o aplicaie poate beneficia de un grad ridicat de
superioar a bazei de date Cassandra n ceea ce privete creterea disponibilitate, o scalare liniar a performanei i de o interfa
volumului de date procesate odat cu creterea numrului de simpl de acces ctre o multitudine de servere de cost redus fr
noduri din cluster.
un punct unic de eec (single point of failure).
n cadrul unui context de cluster se pot defini cantitatea de
date pe care un anumit nod poate s o proceseze (prin intermediul token-ilor) i pe care nod din cluster s ajung o anumit
nregistrare. Gradul de disponibilitate al cluster-ului se poate
regla prin intermediul strategiei de replicare care indic numrul
de copii (replica) al fiecrui rnd dintr-un tabel ce trebuie s existe
n cluster la un moment dat.
Pentru a crea un cluster Cassandra simplu, editai fiierul
cassandra.yaml i completai urmtoarele valori:

Necesare pentru instalare:


1. JDK 7+
2. Python 2.7.x

cluster_name: Test Cluster


seed_provider:
# Addresses of hosts that are deemed contact
points.
# Cassandra nodes use this list of hosts to find
each other and learn
# the topology of the ring. You must change this
if you are running
# multiple nodes!
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: 16.22.70.184
listen_address: 16.22.70.184

Aceast baz de date poate fi instalat att pe Linux ct i pe


Windows, iar procesul de instalare este unul simplu: descrcarea
i decomprimarea arhivei software, configurarea a cteva adrese
pe disc folosite pentru stocarea datelor n fiierului cassandra.
yaml i rularea executabilului cassandra.
Dup ce linia de comand este pornit totul ar trebui s par
Dup ce fiierul de configurare este finalizat, instalai pachefoarte familiar. Limbajul de interogare, CQL (Cassandra Query tul Cassandra i copiai fiierul cassandra.yaml pe toate nodurile
Language) e aproape identic cu SQL.
din cluster. Valoarea cluster_name trebuie s fie identic pe toate
mainile. Nodurile seed sunt utilizate de ctre fiecare nod din
cqlsh:demo> create keyspace demo with replication =
... {class:SimpleStrategy, replication_
cluster pentru a descoperi topologia cluster-ului (Pentru acest
factor:1};
exemplu alegei un nod ca i nod seed i completai IP-ul acescqlsh:demo> create table users (
... id varchar primary key,
tuia pe restul mainilor). Setai cmpul listen_address la adresa
... name varchar
IP a fiecrei main, aceasta va fi folosit pentru a comunica cu
... );
cqlsh:demo> insert into users (id, name) values
celelalte noduri.
... (1, John);

46

nr. 33/martie, 2015 | www.todaysoftmag.ro

legal
# Node 1 Configuration
cluster_name: Test Cluster
seed_provider:
- class_name: org.apache.cassandra.locator.
SimpleSeedProvider
parameters:
- seeds: 16.22.70.184
listen_address: 16.22.70.184
# Node 2 Configuration
cluster_name: Test Cluster
seed_provider:
- class_name: org.apache.cassandra.locator.
SimpleSeedProvider
parameters:
- seeds: 16.22.70.184
listen_address: 16.22.70.193

Dup ce toate nodurile au fost configurate i pornite, putem


verifica pornirea cu succes a fiecrei maini cutnd mesajul
Listening for thrift clients... n consola de pornire Cassandra.
Pentru a verifica starea cluster-ului, putem utiliza comanda de
mai jos:
e:\programs\apache-cassandra-2.1.2\bin> nodetool status
Starting NodeTool
Datacenter: datacenter1
========================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address
Load
Tokens Owns
Host
ID
Rack
DN 16.59.61.100
?
256
?
9ae29fc3-b218-4ee2-904a-0db4ff5e28a3 rack1
DN 16.60.161.225 ?
256
?
48045f86-26a4-4e1f-80fc-12dc16480319 rack1
UN 16.22.70.184
330.11 KB 256
?
8b42a1e4-abe3-406a-96d8-12c12382b075 rack1
DN 16.22.69.37
?
256
?
c3b3feef-41e2-4346-a86e-ec443fbd2fa5 rack1

Utilitarul nodetool folosit mai sus permite adugarea/tergerea


de noduri n/din cluster precum i executarea unor operaii de
ntreinere i management.

Cod Java

TODAY SOFTWARE MAGAZINE


public class CassandraTestClient {
private Cluster cluster;
private Session session;
public void connect(String node) {
cluster = Cluster.builder().addContactPoint(node).
build();
System.out.printf(Connected to cluster: %s\n,
cluster.getMetadata().getClusterName());
session = cluster.connect();
}
public List<Row> getUsers() {
ResultSet execute = session.execute(select * +
from demo.users;);
return execute.all();
// dont do this outside a demo
}
public List<Row> getUsersUsingQueryBuilder() {
Select select = QueryBuilder.select().all().
from(demo, users);
return session.execute(select).all();
// dont do this outside a demo
}
public void close() {
session.close();
cluster.close();
}
public static void main(String[] args) {
CassandraTestClient client =
new CassandraTestClient();
client.connect(127.0.0.1);
System.out.println(client.getUsers());
System.out.println(client.
getUsersUsingQueryBuilder());
client.close();
}
}

n exemplul de mai sus, codul client se conecteaz la clusterul Cassandra utiliznd nodul contact primit (n acest caz, maina
local) care are rolul de a-i descoperi clientului topologia clusterului. Dup ce obiectul Session a fost obinut putem construi i
executa interogri ntr-un mod foarte asemntor cum am face
cu o baz de date Oracle.
Metoda getUsers execut interogarea CQL i returneaz toate
rndurile ca i rezultat (a se folosi doar pentru un numr mic de
rnduri n tabel deoarece foreaz aducerea tuturor rndurilor din
tabel odat). API-ul DataStax permite i mecanismele avansate de
execuie a interogrilor prezente n clienii tradiionali ai bazelor
de date cum ar fi prepared i batch statements (cu toate acestea
avei grij, batch-urile nu trebuiesc utilizate pentru performan)
i setri cum ar fi fetch size i selectarea unor politici de reconectare i rencrcare.
Pe lng construcia de statement-uri CQL, DataStax ofer
API-ul QueryBuilder care permite crearea dinamic a interogrilor cu beneficiul de a elimina atacurile de tip injection. Metoda
getUsersUsingQueryBuilder ilustreaz acest mecanism.
Rezultatul rulrii metodei CassandraTestClient.main() trebuie
s fie:

n ceea ce privete clienii de API, Cassandra ofer o gam


larg de posibiliti n funcie de limbajul de programare utilizat. Cel puin 6 din aceti clieni sunt scrii n limbajul Java, iar
DataStax, Astyanax i Hector sunt printre cei mai utilizai. Pentru
exemplul de mai jos vom folosi API-ul DataStax deoarece este
unul din alegerile mature care dispune de o documentaie clar i
detaliat. (Compania DataStax este una ce investeste activ n ecosistemul Cassandra, oferind documentaie pentru aceast baz de
date ca i soluie open-source dar i dezvoltnd n paralel o soluie
comercial bazat pe Cassandra).
Pentru a scrie o aplicaie Java simpl pentru Cassandra,
ncepem prin a adauga dependina cassandra-driver-core n
fiierul de configurare Maven, pom.xml.
Connected to cluster: Test Cluster
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>2.1.3</version>
</dependency>

[Row[1, John]]
[Row[1, John]]

Cassandra, limitri i soluii

Cu toate c baza de date Cassandra ofer multe avantaje comClasa de mai jos se conecteaz la instana local de Cassandra parativ cu soluiile clasice de tip relaional, prezint de asemenea
i interogheaz utilizatorii din tabelul creat anterior prin linia de i cteva dezavantaje semnificative. Punctele slabe ale acestei
comand.
soluii sunt:
i. Fr tranzacii,
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
ii. Fr JOIN-uri,
import com.datastax.driver.core.Row;
iii. Fr
interogri complexe.
import com.datastax.driver.core.Session;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Select;
import java.util.List;

Fr tranzacii

Cassandra nu ofer garania atomicitii i izolrii la nivel de


www.todaysoftmag.ro | nr. 33/martie, 2015

47

programare
Apache Cassandra, Primii Pai
tranzacie (de fapt, conceptul de tranzacie nu exist), cu toate
acestea, asigur aceste proprieti la nivelul unui rnd de tabel.
Avnd n vedere natura bazei de date Cassandra (column-oriented key-value store), garania la nivel de rnd are sens din punct
de vedere al design-ului deoarece ntr-o baza de date NoSQL de
acest tip fiecare rnd ar trebui s reprezinte o entitate complexa
ntreag (iar accesul atomic i izolat la acea entitate ar trebuie s
fie suficient pentru a asigura consistena datelor).
n ceea ce privete consistena datelor la nivel de cluster, Cassandra ofer posibilitatea de a folosi diferite nivele de
consisten pentru citire i scriere. Aceste nivele pot fi rezumate
la urmtoarea idee: Cte noduri din cluster trebuie s confirme
operaia de citire/scriere?
De asemenea, pentru a ajuta programatorii n a asigura
consistena datelor, ncepnd cu Cassandra 2.0, s-a adugat
conceptul de tranzacie lightweight. Cu toate c numele este
promitor, functionalitatea permite operaii de tip compare and
set cum ar fi crearea unei inregistrri noi doar dac nu exist
deja sau actualizarea unei inregistrari dac o anumit condiie
e indeplinit.
Despre problema lipsei tranzaciilor, cunoscutul programator i autor, Martin Fowler, spune c nu trebuie privit ca
i un dezavantaj major fiindc n majoritatea cazurilor utilizarea tranzaciilor pe perioade mari de timp poate afecta serios
performana. Astfel n [9] el propune soluia de offline lock n care
setul de date este versionat iar fiecare commit necesit verificarea
informaiei de versiune pentru setul de date implicat n operaie.
Urmtoarea diagram prezint un exemplu pentru acest
concept.

Fr interogari complexe

Dac o aplicaie necesit mult flexibilitate n ceea ce privete


condiiile interogrilor, Cassandra nu va fi de mare ajutor. De
fapt, Cassandra nu va permite
setarea unei condiii pe o coloan care nu face parte din
cheia primar sau nu e indexat
In exemplul demo.users de mai sus nu putem executa
CQL-ul:
select * from users where name = John;

fr a crea explicit un index pe coloana name


setarea unei condiii folosind unul din operatorii IN, =, >,
>=, <, or <= fr a adauga o condiie de egalitate pe cel puin
una din coloanele ce fac parte din cheie,
Dac definim un index pe coloana name n
exemplul demo.users de mai sus, folosind CQL-ul
create index users_name_index on users(name);

putem executa interogarea


select * from users where name = John;

ns nu putem executa interogarea similar

select * from users where name in (John);

deoarece interogarea nu contine o condiie de egalitate


n aceasta situaie suntem forai s implementm unele interogari manual. ns, din fericire majoritatea soluiilor NoSQL
permit integrri Hadoop iar n acest caz specific, Cassandra poate
fi integrat cu 2 framwork-uri ce permit execuia de interogri,
Apache Hive [5] i Apache Pig [6] (din pcate documentaia
despre integrarea propriu-zis lipsete cu desvrire, ns v
recomand s cutai cteva cri cu Cassandra care includ aceste
informaii). Apache Hive ofer o interfa foarte similar cu SQL
i CQL care nu necesit nvarea de concepte noi ns poate avea
penalizri de performan, pe cnd Apache Pig dispune de un
limbaj de programare care permite execuia de interogri ntr-o
manier programatic i cu un grad mai mare de control.

Concluzie

NoSQL reprezint un pas important n dezvoltarea mecanismelor de persistare a datelor care necesit o schimbare n modul
care trebuie s gndim aplicaiile. Fie c o facem din necesitate
sau din curiozitate programatic, consider c NoSQL este o tehnologie ce merit nvat.

Bibliografie
1.
2.

Fr JOIN-uri

Aceast binecunoscut limitare a bazelor de date NoSQL


este una cu care trebuie s ncepei. Crearea (sau migrarea)
unei aplicaii cu ajutorul Cassandra va necesita gndire NoSQL.
Aceasta nseamn remodelarea structurii bazei de date n jurul
ideii de modele agregate (nu stoca un tabel cu utilizatori i un
tabel cu adrese, ci stocheaz un singur tabel pentru utilizatori
n care nregistrarea pentru utilizator include adresele necesare)
chiar dac presupune un anumit nivel de redundan a datelor n
db sau o rescriere major a data acces layer-ului. Cu toate aceastea, n funcie de modelul de business al aplicaiei, utilizarea de
modele agregate ar putea simplica mult codul de persisten.

48

nr. 33/martie, 2015 | www.todaysoftmag.ro

3.
4.
5.
6.
7.
8.

Introduction to NoSQL by Martin Fowler, https://www.youtube.com/


watch?v=qI_g07C_Q5I
Apache Cassandra 2.1 Documentation, http://www.datastax.com/documentation/cassandra/2.1/cassandra/gettingStartedCassandraIntro.html
Apache Cassandra Installation on Windows, http://kimola.com/articles/
cassandra-installation-on-windows-platform
datastax.com/documentation/developer/java-driver/2.1/java-driver/
whatsNew2.html
Apache Hive, https://hive.apache.org/
Apache Pig, http://pig.apache.org/
Cassandra High Performance Cookbook by Edward Capriolo
martinfowler.com/eaaCatalog/optimisticOfflineLock.html
Sergiu Indrie

sergiu-mircea.indrie@hp.com
Software Engineer
@ HP

testare

TODAY SOFTWARE MAGAZINE

Appium - testare automat cross-platform


pentru dispozitive mobile

ecesitatea de a scrie cod care s poat fi rulat pe mai multe platforme nu este o veste nou. Ideea a stat la baza mainii virtuale din Java, la platforma Mono. Aceast nevoie este amplificat de apariia sistemelor de operare mobile IOS i Android.
Windows Mobile nu face obiectul acestui articol, dei o bun parte din platformele enumerate sunt compatibile. Un numr
imens de aplicaii exist pentru ambele platforme, o bun parte din ele ncercnd s pstreze aceeai interfa, n ciuda specificului
vizual al platformei.
Existena a dou platforme separate de dezvoltare pentru
aceeai aplicaie mai are un dezavantaj important, contracarat
parial poate de cazurile aplicaiilor care necesit performane
maxime: necesitatea de a avea echipe separate de dezvoltare, cu
expertiz n limbaje diferite (Objective-C i Java) care trebuie sincronizate din punct de vedere al managementului, pentru a oferi
funcii i experien similar pentru utilizatorii celor dou sisteme de operare. Nevoia ridicat pentru o platform de dezvoltare
unitar a generat o puzderie de soluii: Xamarin (probabil cea mai
popular soluie, bazat pe C#), PhoneGap (HTML5/JavaScript),
Appcelerator (JavaScript), Sencha, Corona, etc. .i pentru c testarea automat are exact aceeai nevoie, din aceleai motive,
soluiile nu au ntrziat s apar. n cele ce urmeaz vom discuta
despre Appium, una dintre cele mai eficiente soluii. (Calabash
este o alt soluie care adreseaz aceleai probleme, dar ntr-un
mod diferit).
n mod tradiional, testele automate pentru Android folosesc
framework-ul uiautomator de la Google, o soluie care folosete
Java ca limbaj de programare, sau monkeyrunner, o unealt mai
simpl bazat pe Python. Testele de IOS folosesc UI Automation
API, soluie oferit nativ de Apple ce folosete JavaScript ca limbaj. Ambele soluii necesit cunotine relativ ridicate despre
specificul platformei, dar problema principal este faptul c nu
exist compatibilitate ntre ele. Orice tester care va scrie teste
automate pentru ambele platforme va trebui s cunoasc dou
limbaje de program, s ntrein dou medii de testare diferite,
s ntrein dou seturi separate de teste, chiar i n cazul n care
flow-ul este exact acelai pe ambele platforme. Urmtorul pas
nspre unificarea mediului de testare a fost apariia Selendroid,
respectiv ios-driver, soluii bazate pe Selenium WebDriver API,
respectiv pe protocolul JSON Wire. Cu alte cuvinte, aceste soluii
sunt un middleware situat ntre testarea automat bazat pe
soluiile native i codul familiar din Selenium WebDriver. ns
aceste soluii nu rezolv complet problemele iniiale, reducnd
doar limbajul de programare la Java.
Unificarea real a mediului de dezvoltare de testare automat

este adus de Appium (iniial folosit pentru testarea aplicaiilor


IOS). Appium pornete de la patru idei eseniale:
Aplicaia testat trebuie s fie nemodificat, adic s nu fie
necesar instrumentation sau rooting, modificri care pot face ca
testele s nu realiste Appium nu necesit instrumentation i
funcioneaz cu orice dispozitiv.
Flexibilitate ridicat: existena opiunii a mai multor limbaje de programare, de librrii utilizate exist clieni Appium
pentru Java, Python, JavaScript, C#, etc.; se poate integra uor
cu librrii de validare ca TestNG sau jUnit.
Utilizarea uneltelor consacrate WebDriver este soluia
cea mai utilizat pentru testare web, ca atare se folosete i n
Appium, pentru testarea dispozitivelor mobile.
Open-source Appium este open-source i este sprijinit de
o comunitate puternic.
Fiind construit peste Selenium WebDriver, Appium nu se
rezum la testarea aplicaiilor native, ci simplific i testarea
aplicaiilor mobile hibride sau web, practic reducnd testul sau
prile aferente la un test clasic Selenium.

Arhitectura Appium

Appium este construit pe baza arhitecturii client/server, partea


de server fiind bazat pe node.js, iar cea de client fiind reprezentat de lista de clieni disponibili pentru limbajele enumerate mai
sus. Comunicarea ntre server i client se face prin REST, acest
fapt permind executarea de teste remote, pe alte maini dect
cea la care este conectat dispozitivul fizic sau emulatorul. Exist
chiar servicii cloud pentru executarea de teste, Sauce Labs fiind cel
mai important serviciu de acest tip. Varianta cea mai simpl de
pornire a aplicaiei este folosirea unui wrapper GUI, disponibil pe
site-ul Appium, care nu necesit instalarea node.js i a modulului
aferent, n plus oferind i un Inspector grafic util n procesul de
dezvoltare pentru identificarea componentelor din aplicaie.
Deoarece Appium este un layer suplimentar peste platformele
de automation native, exist anumite condiii pentru executarea
www.todaysoftmag.ro | nr. 33/martie, 2015

49

testare
Appium - testare automat cross-platform pentru dispozitive mobile

@BeforeMethod

testelor. n principal vorbim de faptul ca testele de IOS pot fi exe- public void setUp(){
File app = new File(appFolder, myApp.apk);
cutate doar pe platforma MAC OSX, din cauza dependenei de
DesiredCapabilities capabilities =
XCode (desigur, se pot executa remote de pe o main Windows).
new DesiredCapabilities();
Pe de alt parte testele de Android pot fi executate de pe maini
capabilities.setCapability(platformName,
folosind Windows, OSX sau Linux, condiia principal fiind
MobilePlatform.ANDROID);
capabilities.setCapability(deviceName,
instalarea i configurarea Android SDK pe maina respectiv.

Codul face ct 1000 de imagini, iar fiecare imagine face ct 1000


de cuvinte
Abordarea din punct de vedere a codului este n mare similar
cu codul scris ntr-o platform bazat pe Selenium WebDriver. n
cele ce urmeaz, vom prezenta o organizare a codului care are n
vedere n principal simplificarea mentenanei testelor, utiliznd
din plin pattern-ul PageFactory alturi de versiunea Appium a
assertion-urilor specifice Selenium. Ca test framework vom folosi
TestNG care este mai util n testarea automat dect jUnit, dar
Appium este total n aceast privin.
Ne vom imagina partea de login a unei aplicaii cu look identic
pe Android i IOS, care are un splash screen la pornire. Ecranul de
login este simplu, conine dou cmpuri text pentru utilizator i
parol i un buton SignIn. Exist i un element label care va afia
un mesaj de eroare dac datele utilizatorului sunt incorecte.
Cel mai simplu mod de a crea un proiect Appium este folosirea Maven, fiierul aferent de configurare pom.xml va trebui
s conin dependinele de Selenium i urmtoarea seciune (n
funcie de versiunea curent de client Java Appium):
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>2.1.0</version>
</dependency>

Totul ncepe cu pregtirea testelor, o practic adesea folositoare este crearea unei clase printe gen BaseTest care va fi
motenit de clasele de test. Aici este locul unde putem face
configurarea iniial pentru suita de teste ntr-o metod care
are annotation-ul @BeforeSuite, pentru fiecare test generic n
metoda marcat cu @BeforeTest i, desigur, partea de tearDown.
Cea mai simpl variant ar cere instanierea unui obiect de tipul
AppiumDriver (sau AndroidDriver/IOSDriver n versiunile mai
noi) n metoda de setup a testelor, a ataa acestui obiect un obiect
DesiredCapabilities care practic furnizeaz informaii despre
dispozitivul folosit. Acest obiect va fi folosit pe parcursul testului pentru a trimite comenzi spre dispozitivul mobil i pentru
a extrage informaii. Odat testul finalizat, obiectul va fi nchis
explicit n metoda de teardown. Mai jos, v oferim un exemplu
pentru o tablet Nexus 10:

50

nr. 33/martie, 2015 | www.todaysoftmag.ro

Nexus 10);
capabilities.setCapability(platformVersion,
5.0.1);
capabilities.setCapability(app,
app.getAbsolutePath());
capabilities.setCapability(appPackage,
org.myapp.demo;);
capabilities.setCapability(appActivity,
org.myapp.SplashActivity);
capabilities.setCapability(noReset, false);
AndroidDriver driver = new AndroidDriver(
new URL(http://127.0.0.1:4723/wd/hub),
capabilities);

Prile eseniale n aceast configurare sunt: app locaia


aplicaiei care va fi ncrcat automat n tablet, appPackage
specific tipul de pachet ce va fi executat (specific Android),
appActivity specific felul de activity trebuie s atepte testul,
noReset/fullReset specific dac aplicaia va fi reiniializat,
respectiv reinstalat. Partea de tearDown va nchide aplicaia i
obiectul driver:
@AfterMethod
public void tearDown() throws Exception {
driver.closeApp();
driver.quit();
}

Pentru a simplifica nelegerea exemplelor, n continuare listm ierarhia poriunii din ecran, pentru ambele platforme:

Android

<android.widget.RelativeLayout
resource-id=org.myapp.demo:id/signin_layout
class=android.widget.RelativeLayout
package=org.myapp.demo>
<android.widget.EditText text=JohnDoe
resource-id=org.myapp.demo:id/signin_email_text
class=android.widget.EditText
package=org.myapp.demo/>
<android.widget.EditText
resource-id=org.myapp.demo:id/signin_password_text
password=true class=android.widget.EditText
package=org.myapp.demo />
<android.widget.TextView
resource-id=org.myapp.demo:id/signin_result
class=android.widget.TextView
package=org.myapp.demo/>
<android.widget.Button text=Sign In
resource-id=org.myapp.demo:id/signin_ok_button
class=android.widget.Button
package=org.myapp.demo contentdesc=SignInButton/>
</android.widget.RelativeLayout>

TODAY SOFTWARE MAGAZINE


IOS

<UIATableView name=authentication enabled=true


visible=true>
<UIATableCell name= label= visible=true>
<UIATextField name=user label=JohnDoe
value=username visible=true>
</UIATextField>
</UIATableCell>
<UIATableCell name= label= visible=true>
<UIATextField name=password label=
value=password visible=true>
</UIATextField>
</UIATableCell>
<UIATableCell name= label= visible=true>
<UIAButton name=SignIn label=SignIn
value=SignIn enabled=false visible=true>
</UIAButton>
</UIATableCell>
<UIATableCell name= label=
visible=false>
<UIAStaticText name=labelSignIn label=
value= visible=false>
</UIAStaticText>
</UIATableView>

Testul prezentat va fi simplu, dar suficient pentru a prezenta


conceptul i designul testelor. Paii:
1. Utilizatorul pornete aplicaia i verific apariia ecranului
de SignIn, existena unui text demonstrativ n cmpul username
(JohnDoe) i faptul c butonul de SignIn este dezactivat.
2. Utilizatorul face o aciune touch n cmpul username i
verific dispariia textului demonstrativ iniial.
3. Utilizatorul introduce un username corect i o parol incorect, se valideaz c butonul SignIn este activat.
4. Utilizatorul face o aciune touch pe butonul SignIn, se valideaz apariia unui mesaj de eroare n i c butonul este n
continuare vizibil.

public class LoginScreen {


final String PKG = org.myapp.demo;
private AppiumDriver driver;

//elementele sunt identificate pentru ambele


//platforme, simplificnd mult testele n cazul n
//care interfaa este identic
@iOSFindBy(name = user)
@AndroidFindBy(id = PKG + /signin_email_text)
private MobileElement userTxt;
@iOSFindBy(name = password)
@AndroidFindBy(id = PKG + /signin_password_text)
private MobileElement passwdTxt;
//utilizm un criteriu de identificare xpath,
//n cazul de fa cu scop didactic
@iOSFindBy(xpath =
//UIAStaticText [@name=labelSignIn])
@AndroidFindBy(xpath =
//android.widget.TextView [@id= + PKG +
/signin_result])
private MobileElement labelTxt;
@iOSFindBy(className = UIAButton)
@AndroidFindBy(uiAutomator = text(\Sign In\))
private MobileElement signinBtn;

public LoginScreen(final AppiumDriver driver) {


this.driver = driver;
//criteriile de identificare annotated
//mai sus sunt iniializate
PageFactory.initElements(new
AppiumFieldDecorator(driver), this);
//testul va atepta MAXIM 10 secunde pentru
//vizibilitatea cmpului user i password
final WebDriverWait wait =
new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOf(userTxt));
wait.until(ExpectedConditions.
visibilityOf(passwdTxt));
}
public void touchUserNameBox() {
userTxt.click();
}
public void typeUserName(String username) {
userTxt.sendKeys(username);
}
public String getVisibleUsername() {
return userTxt.getText();
}
public void typePassword(String pwd) {
passwdTxt.sendKeys(pwd);
}
public boolean isSignInBtnEnabled() {
return signinBtn.isEnabled();
}
public boolean hasErrorMessage() {
return labelTxt.isDisplayed();
}
public boolean isSignInBtnVisible() {
return signinBtn.isDisplayed();
}
public void touchSignInBtn() {
signinBtn.click();
}
public String getErrorMessage(){
return labelTxt.getText();
}
}

Abordarea simpl i de obicei ineficient este de a scrie un test


care s reproduc aceti pai prin identificarea obiectelor cu care
interacioneaz testul, efectuarea aciunilor i validarea. Problema
major n aceast abordare, de altfel n general la testele automate de acest gen indiferent de produsul folosit, este faptul c
mentenana testelor devine dificil cnd numrul lor crete. Dac
vom avea douzeci de teste care fac aciuni pe aceleai elemente,
n momentul n care unul din elemente se modific, acesta va
trebui modificat n toate testele. Chiar dac extragem din teste
criteriile utilizate pentru identificarea elementelor i le facem
membri ai clasei de test, mentenana este n continuare relativ
dificil i mai mult, testele vor trebui duplicate pentru ambele
platforme.
O abordare mai elegant i eficient n cazul suitelor mari de
teste este de a separa testele propriu zise de obiectele care modeleaz n cod ecranele aplicaiei. Practic fiecare ecran va avea o
clas corespondent Java, existnd i posibilitatea de a modela
separat poriuni ale ecranului, n cazurile ecranelor mai complexe.
Criteriile de identificare ale elementelor vor fi membri privai ai
Testul corespunztor va folosi metodele publice din clasa de
clasei, astfel respectnd filosofia OOP, aciunile sau caracteristi- mai sus i, desigur, assertions pentru validare:
cile elementelor vor fi expuse ca metode publice, uor de utilizat @Test
n testul propriu-zis. Acest pattern este similar cu PageFactory public void testLogin(){
LoginScreen screen = new LoginScreen(driver);
utilizat n testele Selenium WebDriver.
assertEquals(screen.getVisibleUsername(),
Clasa care va modela ecranul (de fapt poriunea de ecran
JohnDoe);
care conine elementele de autentificare) este prezentat mai jos, assertFalse(isSignInBtnEnabled());
screen.touchUserNameBox();
explicaiile fiind prezentate sub forma comentariilor Java, por- assertEquals(screen.getVisibleUsername(), );
screen.typeUserName(TotallyValid);
nind de la premisa unui cod self-describing.
screen.typePassword(badpassword);
assertTrue(screen.isSignInBtnEnabled());
screen.touchSignInBtn();

www.todaysoftmag.ro | nr. 33/martie, 2015

51

testare
Appium - testare automat cross-platform pentru dispozitive mobile
assertTrue(screen.hasErrorMessage());
assertEquals(screen.getErrorMessage(),
Invalid credentials);
assertTrue(screen.isSignInBtnVisible());
}

Aceast organizare a testelor ajut mult la mentenan, adesea modificrile din UI necesitnd doar modificare a criteriilor
de identificare a elementelor n clasele care modeleaz ecranele
aplicaiei, testele funcionnd corect fr modificare, presupunnd desigur c nu exist schimbri n flow-ul aplicaiei). Un alt
plus important este faptul c testul devine uor de citit i c se
observ uor paii i validrile. Desigur, devine simplu de implementat BDD pentru a simplifica mai mult testele -acolo unde
se poate aplica- folosind unul din tool-ulurile existente pe pia
sau implementnd o variant proprie. Criteriile de identificare
a elementelor pot fi xpath, id, name, className i UIAutomator.
Acest ultim criteriu folosete din plin API-urile IOS (predicates)
i Android pentru a identifica elementele cnd celelalte variante
nu sunt optime. Uneori acest tip de identificare necesit un studiu
prealabil al specificaiilor implementrii (n special IOS predicates), oferind flexibilitate foarte mare i complexitate pe msur.

Concluzii

Appium a devenit n scurt timp la fel de popular n testarea


aplicaiilor mobile ca Selenium WebDriver pentru aplicaiile web.
Lista de avantaje este mare: open-source, aplicaia testat este cea

52

nr. 33/martie, 2015 | www.todaysoftmag.ro

final nefiind necesare nici un fel de intervenie asupra codului


pentru a face aplicaia testabil, numr mare de limbaje suportate, compatibilitate ridicat cu dispozitivele i versiunile de
sisteme de operare, testele se scriu o singur dat pentru ambele
platforme (cnd interfaa este similar), suport pentru aplicaii
native/hybrid/web, comunitate mare. Exist desigur i dezavantaje: testele de IOS pot fi executate doar pe maini MAC i nu se
pot executa mai mult de un test simultan. Acest ultim dezavantaj
poate fi nlturat prin utilizarea unui serviciu cloud ca Sauce Lab.

Vasile Pop

vasile.pop@intel.com
Software Engineer
@ Intel Romnia

diverse

TODAY SOFTWARE MAGAZINE

Analiza pentru tehnologiile viitoare

m nceput s scriu la acest articol cu gndul la cum va arta tehnologia n viitor, la modul n care putem s anticipm i s ne
pregtim pentru schimbrile care vor avea loc n anii ce urmeaz. Oamenii de tiin caut astzi s descopere care va fi viitorul tiinei, tehnologiei, economiei i societii pentru a putea identifica arii de cercetare strategic care pot genera beneficii n
economie i n societate.
Analiza orientat spre tehnologiile viitoare (FTA- Future oriented Technology
Analysis) se definete ca un set de activiti
care faciliteaz luarea unor decizii i
declanarea unor aciuni coordonate n
special in domeniul tiinei, tehnologiei i
inovaiei (Eerola and Miles, 2011).
Cine este interesat de o astfel de analiz? s-ar putea ntreba unii. La momentul
actual, analiza orientat spre tehnologiile
viitoare este un subiect important pe agenda
U.E sau a companiilor multinaionale.
Industriile mari unde analiza orientat
ctre viitor este des ntlnit sunt: energie
i mediu, tehnologia informaiei, comerul
online, producie i roboi, medicin i biogenetic, transport, spaiu.

n cele ce urmeaz, voi detalia ce


nseamn analiza orientat spre viitor i ce
implic ea. Cteva dintre principiile de baz
ale FTA sunt:
Orientarea ctre viitor
Participarea
Dovezi concrete
Multidisciplinaritate
Coordonare de resurse i oameni
Orientare spre aciune
Disciplinele care fac parte din domeniul
analizei orientate spre viitor conform lui
Alan L. Porter sunt: previziunea (foresight),
prognoza (forcasting), evaluarea tehnologiilor, inteligena tehnic (technical intelligence)
i roadmapping. Acestea contribuie la

nelegerea mai bun a provocrilor viitoare


i modelarea unor soluii sustenabile pentru
viitor.
Voi trece defini succint patru dintre
discipline i voi detalia mai mult partea de
previziune.
Prognoza (Forecasting) disciplina
care calculeaz i anticipeaz direcia unui
eveniment precum i ritmul schimbrii.
Acesta este rezultat al unui studiu raional
i a unei analize pe date pertinente.
Un exemplu n acest sens ar fi decizia
unui stat s susin un program spaial.
Acesta va avea un impact major n industria
electronic, folosirea de materiale noi mai
avansate etc. n acelai timp aceast decizie
poate afecta negativ domeniul transporturilor terestre care pot rmne subfinanate.
Evaluarea tehnologiilor (Technology
Assessment) ncercarea sistematic de
a prevedea consecinele introducerii unei
tehnologii noi.
La momentul actual a devenit dificil s
separm activitile zilnice ale oamenilor
de tehnologie. Prin urmare, am putea defini
tehnologia ca fiind modalitatea i mijlocul
prin care oamenii produc bunuri materiale.
n momentul n care se produce o schimbare de tehnologie ntregul sistem din care
fac parte i oamenii se poate schimba.
Inteligena tehnic Se mai poate
numi i inteligena competitiv. Folosirea
inteligenei n raport cu posibilitile tehnice ale competiiei.
Roadmapping folosete avansul tehnologic anticipat pentru a genera planuri de

www.todaysoftmag.ro | nr. 33/martie, 2015

53

diverse
Analiza pentru tehnologiile viitoare
aciune.
Se folosete cel mai adesea n planificarea produselor de ctre
companii.
Previziunea (Foresight) abilitatea de a prezice ce se va
ntmpla sau de ce va fi nevoie n viitor. Este disciplina care trebuie aplicat exclusiv de experi pentru a putea avea ncredere n
rezultatele analizei.
Experii analizeaz orice informaie pentru a identifica
poteniale previziuni. La acest nivel se va stabili o strategie care
implic de multe ori un mecanism participativ. Abordrile
tradiionale nu mai sunt la fel de relevante. Planul este cel mai
puin important element care se adaug rezultatelor la final.
Este important de menionat c nu se discut despre un viitor
predeterminat ci despre explorarea modului n care poate evolua
viitorul n funcie de aciunile i deciziile care se iau n prezent.
Avem mai jos prezentat contextul n care are loc previziunea.

Se folosesc de aceste discipline deopotriv oameni de la nivel


guvernamental, centre de cercetare, organizaii non-profit precum i compani private care doresc s se menin pe pia sau s
i creasc profitabilitatea.
Este foarte valoros pentru societate c aceste discipline faciliteaz luarea de decizii i coordonarea aciunilor n special n
domeniul tiinei, tehnologiei i inovarea n elaborarea de politici
sustenabile pe viitor de care, de ce s nu recunoatem, beneficiem
cu toii.

Biografie
1.
2.
3.
4.
5.

1.http://w w w.nest a.org .u k/public at ions/


quantitative-analysis-technology-futures-part-1
2. https://ec.europa.eu/jrc/en/event/site/fta2014
3. http://thinkingfutures.net/wp-content/uploads/2010/10/
An-Overview-of-Foresight-Methodologies1.pdf
4.http://www.techmonitor.net/tm/images/3/37/03jul_aug_sf2.pdf
5. http://web.mit.edu/smadnick/www/wp/2008-15.pdf

n continuare, este prezentat generic procesul previziunii. La


intrri sunt lucrurile care se ntmpl n prezent. nuntrul procesului de previziune are loc analiza detaliat.

Pentru fiecare din disciplinele FTA definite mai sus se folosesc


un set de metode combinate de tip explorativ, consultativ, explicativ i participativ.
Cum spaiul articolului e limitat, pentru cei mai curioi dintre voi care doresc o imagine mai bun a metodelor de analiz
folosite pentru previziune putei cuta pe internet schema numit
Futures Diamond a lui Popper.
Ca i concluzie la un subiect aa de complex cum este Analiza
orientat spre tehnologiile viitoare, putem spune c acesta este
un termen generic folosit pentru a putea cuprinde un set mai
mare de discipline (previziune, prognoz, evaluarea tehnologiilor,
inteligen tehnic i roadmapping).

54

nr. 33/martie, 2015 | www.todaysoftmag.ro

Ioana Armean

ioanaa@imprezzio.com
Business Analyst
@ Imprezzio Global

sponsori

powered by

S-ar putea să vă placă și