utilizarea tehnologiilor colaborative in dezvoltarea de software
TRANSCRIPT
Universitatea Alexandru Ioan Cuza, Iaşi
Facultatea de Economie şi Administrarea Afacerilor
Sisteme Informaţionale pentru Afaceri
Utilizarea tehnologiilor colaborative în
dezvoltarea de software
Simciuc Iuliana
Burdun Andrei
2
Cuprins
Introducere ...................................................................................................................................... 3
1. Instrumente de colaborare, medii, şi infrastructură .................................................................... 6
1.1 Instrumente de colaborare model-based ................................................................................ 6
1.2 Instrumente de colaborare process-based .............................................................................. 8
1.3 Instrumente de colaborare de tip awareness .......................................................................... 9
1.4 Instrumente de colaborare la nivel de infrastructură ............................................................. 9
2. Direcţii viitoare în utilizarea tehnologiile colaborative în dezvoltarea de software ................. 10
3. Concluzii ................................................................................................................................... 11
Bibliografie ................................................................................................................................... 12
3
Utilizarea tehnologiilor colaborative în dezvoltarea
de software
Abstract
Collaborative software development is becoming particularly important in the practice of
software delivery. A high level of collaboration is critical because the software development
process remains fundamentally difficult. The difficulty is due, in part, to shifting requirements
and other real-time changes. It is also due to the complexity of the products and services being
delivered.
Today's teams are often geographically or organizationally distributed, adding the
complications of different time zones, corporate policies, and languages to the process. All these
factors require development teams to communicate and monitor progress throughout the
development lifecycle and to work together to find solutions that deliver effective software
shipped on time and on budget.1
Introducere
Ca oameni, avem mai multe limitări care afectează abilitatea noastră de a crea aproape
orice bucată de cod. Când se lucrează la un nivel înalt de abstractizare – ca şi atunci când scriem
cerinţele, codul, cazurile de utilizare – suntem lenţi şi predispuşi la erori. Ca o consecinţă, trebuie
să lucrăm împreună pentru a finaliza proiecte mari, în timp redus şi să avem câteva persoane care
să ne corecteze erorile. Odată ce o să începem să lucrăm împreună, ne confruntăm cu alte
probleme. Limbajul natural pe care-l folosim este bun pentru a comunica, dar, de cele mai multe
ori, este ambiguu. Memoria umană este bună, dar nu atât de precisă încât să-şi amintească detalii
ale unui proiect bogat în detalii. Suntem în imposibilitatea de a urmări tot ceea ce face fiecare
într-un grup mare şi, astfel, riscăm să dublăm munca altora. Sistemele mari pot fi de multe ori
1 http://www-01.ibm.com/software/info/features/collaboration/main.html
4
realizate în multe moduri şi, prin urmare, dezvoltatorii trebuie să conveargă pe o arhitectură
unică.
Tehnicile colaborative în dezvoltarea de software au scopuri multiple care se întind pe
întreg ciclul de viaţă al dezvoltării:
Stabilirea domeniului de aplicare şi funcţionalităţile unui proiect. Inginerii trebuie să
lucreze cu utilizatorii finali şi cu finanţatorii unui proiect software pentru a descrie ceea
ce ar trebuie să facă atât la nivel înalt cât şi la nivel de cerinţe detaliate. Această formă de
colaborare poate avea un impact profund asupra unui proiect variind de la o negociere up-
front de tip cascada la stilul iterativ de evoluţie a prototipului.
Gestionarea dependenţelor între activităţi şi organizaţii. Aceasta cuprinde o gamă
largă de activităţi de colaborare, invlusiv managementul tipic de împărţire a sarcinilor de
lucru, monitorizarea, evaluarea şi controlul activităţilor. Modularizarea deciziilor
afectează, de asemenea, dependenţele.
Reducerea dependenţelor în rândul dezvoltatorilor. Un important mecanism pentru
gestionarea dependenţelor este încercarea de a le reduce acolo unde este posibil,
micşorând, astfel, nevoia de colaborare. Sisteme pentru managementul dezvoltării
sofware permit dezvoltatorilor să lucreze în spaţii proprii (My Workspace) reducându-se
astfel dependenţele între ingineri. Cu spaţii proprii de lucru, dezvoltatorii nu mai trebuie
să aştepte alţi dezvoltatori pentru a-şi putea compila propriile secvenţe de cod.
Identificarea, înregistrarea şi rezolvarea erorilor. Erorile şi ambiguităţile pot apărea în
toate etapele dezvoltării de software şi multe abordări au fost dezvoltate pentru
identificarea si înregistrarea existantei lor. Printre tehnicile de colaborare se află şi
inspecţiile unde mai multe persoane sunt aduse împreună, perspectivele lor multiple pot
identifica erori, iar întrebările puse de ei pot elimina ambiguitatea. Testarea, în cazul în
care un grup creează teste pentru a descoperi erori în software-ul dezvoltat de alţii este o
altă cale de colaborare pentru identificarea erorilor. Utilizatorii de software colaborează,
de asemenea, în identificarea erorilor fie pentru versiuni beta, fie pentru versiuni finale,
prin raportarea de bug-uri. Raportarea erorilor ajuta dezvoltatorii să înregistreze
problemele şi propune soluţii pentru rezolvarea lor.
Înregistrarea memoriei organizaţiei. În orice proiect derulat pe termen lung, oamenii
pot veni şi pleca. Parte din activitatea de colaborare este gestionarea a “cine ce ştie”,
5
astfel încât participanţii la proiect să poată acumula cunoştinţele celorlalţi şi utiliza aceste
informaţii în dezvoltarea software.
Inginerii software au adoptat o gamă largă de tehnologii de comunicare şi de colaborare
pentru a ajuta la coordonarea proiectelor. Fiecare tehnologie de comunicare în masă a fost
adoptată de către inginerii software în folosul proiectului, inclusiv telefonul, teleconferinţa,
emailul, voice mail-ul, listele de discuţii, internetul, mesageria, VoIP şi videoconferinţa. Aceste
căi de comunicare sunt utile în fiecare etapă din ciclul de viaţă al proiectului.
Inginerii software colaborează la definirea specificaţiilor, la crearea diagramelor UML, a
codului sursă şi la rapoartele de testare. Fiecare dintre cele enumerate reprezintă modele diferite
ale proiectului în curs. Colaborarea în dezvoltarea software poate fi inţealeasă ca o colaborare
orientată pe modele în care accentul se pune pe crearea de modele noi, împărtăşirea cunoştinţelor
în jurul modelelor şi eliminarea erorilor în cadrul modelelor.
Orientarea către modele în colaborarea dintre inginerii software este importantă datorită
efectului sau de structurare. Modelele oferă un sens comun pe care inginerii îl utilizează când îşi
coordonează muncă, dar şi atunci când, lucrând împreună, consultă specificaţiile pentru a
determina cum să proiecteze o anumită parte de proiect. Dezvoltatorii utilizează modelele şi
pentru a crea un nou mod de a vedea dezvoltarea proiectului atunci când discuta despre o
diagramă UML şi, alstfel, înţeleg mai bine implicaţiile asupra muncii lor. Modelele elimină şi
ambiguitatea, un inginer putând descrie mai bine felul în care el a înţeles sistemul. Fără structura
şi semantica furnizate de model, ar fi mult mai dificil de recunoscut diferenţele de înţelegere
dintre colaboratori.
Inginerii software au dezvoltat o gamă largă de tehnologii orentate pe modele pentru a
sprijini coloaborarea în cadrul proiectelor. Aceste tehnologii se aplică pe întreg ciclul de viaţă,
incluzant instrumentele de colaborare, diagramele UML, sistemele de management software şi
de urmărire a erorilor. Sistemele de modelare a proceselor au fost create pentru a ajuta şi
gestiona întreg ciclul de viaţă, sprijinind managerii şi inginerii în artibuirea taskurilor,
monitorizând progresului actual şi îmbunătăţind procesele. În domeniul comercial există multe
exemple de software pentru managementul proiectelor, inclusiv Microsoft Project şi Raţional
Method Composer. Au fost create, de asemenea, interfeţe standard ca de exemplu
WebDAV/DeltaV sau PCTE. Integrarea mediilor de dezvoltare web-based serversc la integrarea
unor serii de modele de tehnologii colaborative.
6
1. Instrumente de colaborare, medii, şi infrastructură
Instrumentele create pentru a sprijini colaborarea în dezvoltarea software se încadrează în
patru mari categorii2
Instrumentele de colaborare model-based permit inginerilor să colaboreze în cadrul
reprezentărilor software: diagramele UML, de exemplu. Instrumentele de colaborare process-
based reprezintă toate sau o parte a proceselor dezvoltării software. Sistemele care utilizează
procese explicite de reprezentare permit procese de modelare şi adoptare software. În schimb,
instrumentele care utilizează reprezentări implicite încorporează un proces de muncă specific
precum checkout, edit, checkin. Instrumentele de tip awarness nu suporta taskuri specifice dar,
în schimb, informează dezvoltatorii despre munca altora, în parte pentru a evita conflicte.
Colaborarea infrastructurală a fost dezvoltată pentru a îmbunătăţi interoperabilitatea între
instrumentele de colaborare şi se concentrează, în primul rând, asupra datelor lor şi asupra
controlului integrat.
1.1 Instrumente de colaborare model-based
Dezvoltarea de software implica crearea de multiple componente. Acestea includ
produsul final, codul sursă, dar includ, de asemenea, specificaţiile proiectului, arhitectura,
modelele de proiectare, planurile de testare, etc. Fiecare tip de componentă are semnificaţia sa
proprie, variind de la limbajul natural la limbajul semi-natural al UML-ului sau la semantica
formală a limbajului de programare. Astfel, crearea acestor componente reprezintă crearea
modelelor. Crearea fiecărui dintre aceste componente este un mod inerent de activitate
colaborativa. Mulţi ingineri software contribuie la fiecare componentă, încercând să înţeleagă
„cine” a făcut „ce”, eliminând erorile şi adăugând contribuţia proprie. Dezvoltatorii colaborează
cu clienţii în mod special la definirea specificaţiilor şi la testarea produsului final pentru a se
asigura că modulele dezvoltate reflectă în totalitate ceea ce clientul a dorit. Prin urmare,
colaborarea pentru a crea componente software reprezintă colaborarea pentru a crea modele de
sisteme software. Sistemele proiectate să suporte crearea colaborativa şi de editare a unor
componente specifice suportă, de fapt, crearea de modele specifice şi, deci, suportă colaborarea
2 Jim Whitehead, Collaboration in Software Engineering: A Roadmap
7
model-based. Instrumentele de colaborare există pentru a sprijini crearea oricărui tip de model
găsit în practica dezvoltării de software.
Specificaţiile. În faza de analiza, există multe instrumente comerciale care sprijină
definirea colaborativă de specificaţii: Raţional RequisitePro, Borland CaliberRM, Telelogic
DOORS. Aceste instrumente permit inginerilor să realizeze cazuri de utilizare şi să definească
cerinţe utilizând limbajul natural în format text, să identifice dependentele printre şi între cerinţe
şi use case-uri. Integrarea cu instrumente de design şi de testare permit dependenţe între
reprezentări. Caracteristicile de colaborare variază în funcţie de instrumentele utilizate. În cadrul
RequisitePro, cerinţele sunt stocate într-o bază de date per proiect şi pot fi editate printr-o
interfaţă web-based prin modificarea unui document Word care interacţionează cu baza de date
cu ajutorul unui plug-in sau prin editarea directă prin interfaţa RequisitePro. Mai mulţi
dezvoltatori pot edita specificaţiile simultan prin aceste interfeţe. Deşi este posibilă şi utilizarea
softului din afară organizaţiei, RequisitePro este proiectat pentru folosirea lui în cadrul
organizaţiei. RavenFlow sprijină colaborarea printr-un proces de check-in/check-out. În timp de
majoritatea instrumentelor pentru definirea specificaţiilor sunt aplicaţii desktop, Gatherspace şi
eRequirements sunt softuri colaborative pentru definirea cerinţelor ce pot fi accesate doar printr-
un browser web.
Cercetările privind instrumentele de colaborare pentru definirea specificaţiilor s-au
concentrat pe sprijinirea discuţiilor dintre finanţatorii proiectelor, utilizarea noilor cerinţe ale
proceselor dezvoltării software şi pe explorarea platformelor şi domeniului new media. WinWin
a fost proiectat să sprijine procesul de definire a cerinţelor de dezvoltare software care sprijină
procesele de negociere explicit în interfaţa softului cu o structură de bază care încurajează
rezolvarea conflictelor. ART-SCENE sprijină o abordare a definirii cerinţelor în care o potenţială
echipă creează use case-uri utilizând o serie de şabloane accesibile printr-o intervafaţă web.
Acestea sunt apoi utilizate pentru a genera automat scenarii care descriu situaţii normale şi
alternative şi care pot apoi fi evaluate de care analişti. Proiectul Software Cinema a examinat
utilizarea unei camere pentru a înregistra dialogurile dinte ingineri şi clienţi, permiţând că aceste
descuţii să fie înregistrate şi utilizate pentru analize în detaliu.
Arhitectura. Deşi crearea unei arhitecturi finale a unui software pentru un proiect este o
activitate colaborativă şi politică, multe dintre aceste colaborări au loc în afara instrumentelor de
asistare a proiectării. Raţional Software Architect este un instrument UML concentrat pe
8
arthitectura software. Dezvoltatorii pot parcurce o bibliotecă deja existentă şi pot colabora cu alţi
dezvoltatori în crearea de diagrame, această colaborare fiind mediată de către un sistem de
configurare.
Design. Astăzi, ca urmare a adoptării puternice a UML (Unified Modeling Language),
instrumentele de proiectare software sunt sinonime cu editorii UML şi includ Raţional Rose,
ArgoUML, Borland Together, Telelogic Rhapsody, Altova Umodel. Funcţionalităţile de
colaborare ale UML depind, în mare măsură, de capacităţile de configurare software care stau la
baza sistemul de management.
Testarea. Ca şi definirea cerinţelor, testarea implică de multe ori, colaborări substanţiale
între echipa de dezvoltatori şi clienţi. Amploarea testării variază substanţial în proiecte şi
organizaţii. Dezvoltatorii de aplicaţii software utilizează adesea teste publice beta în care
potenţialii utilizatori primesc access la soft şi raportează bug-uri echipei de dezvoltatori. De
asemenea, cele mai bune practici pentru fezabilitatea testării implică mai mulţi oameni care
realizează task-uri specifice sub observaţia altora, această metodă fiind o nouă formă de testare
colaborativă. Într-o organizaţie de dezvoltatori, testarea implică, de obicei, colaborări între testeri
şi dezvoltatori. Instrumentul cheie de colaborare între aceste două entităţi îl reprezintă urmărirea
bug-urilor. Instrumentele de urmărire a bug-urilor permit înregistrarea unei erori iniţiale,
prioritizarea, adăugarea de comentarii, compararea rapoartelor de acelaşi tip şi atribuirea lor spre
rezolvare unui dezvoltator. În momentul în care un bug a fost corectat, acesta este înregistrat în
sistemul de urmărire a bugurilor. Facilităţile de căutare permit o gamă largă de raportare a
erorilor.
1.2 Instrumente de colaborare process-based
Dezvoltatorii care lucrează împreună pentru a dezvolta o aplicaţie de mare anvergură îşi
pot crea avantaj din a avea structuri predefinite pentru secvenţa de paşi care trebuie parcurşi,
rolurile pe care inginerii trebuie să le îndeplinească, precum şi modulele care trebuie create.
Acesta structura predefinită ia forma unui model de proces sofware şi serveşte la reducerea
volumului de coordonare necesar în a iniţia un proiect. Având structura tipică de paşi, roluri şi
componente definite, dezvoltatorii pot începe să lucreze la proiect mai repede decât atunci când
ar fi nevoiţi să renegocieze întreaga structură a proiectului. Beneficiul principal este acela de a
9
limita timpul necesar de coordonare a muncii din cadrul proiectului prin standardizarea punctelor
de colaborare, dar şi de a creşte predictibilitatea activităţilor viitoare. În măsura în care procesele
software sunt previzibile, mediile software mot media lucrul colaborativ în cadrul unui proiect.
Acestea oferă facilităţi pentru a genera modele de procese sofware într-un limbaj de modelare al
proceselor. În timp ce un model de proces stă la baza mediilor centrate pe procese, acest proces
ghidează activitatea colaborativă a dezvoltatorilor care lucrează la alte componente. De exemplu,
acest mediu poate manageria atribuirea de taskuri inginerilor, monitoriza şi invoca automat
instrumentele necesare: Arcadia, Oz, Marvel, ConversationBuilder.
1.3 Instrumente de colaborare de tip awareness
Sistemele de management a configurări software (SCM) sunt tehnologia primară de
coordonare a colaborării la nivel de fişier între dezvoltatorii software. Mecanismul principal de
colaborare este spaţiul de lucru (workspace). De obicei, fiecare dezvoltator are spaţiul propriu de
lucru şi utilizează metode de checkout, edit, checkin pentru modificarea unei componente a
proiectului. Spaţiile de lucru oferă independenţă faţă de munca celorlalţi dezvoltatori şi, prin
urmare, în timp ce o componentă este verificată, niciun dezvoltator nu-i mai poate verifica starea.
Multe SCM-uri permit o muncă în paralel pe aceleaşi componente, utilizând instrumente de
„merge” pentru a rezolva inconsistenţele. Spaţiile de lucru permit dezvoltatorilor să lucreze mult
mai eficient. Prin creşterea gradului de conştientizare asupra activităţilor realizate de către alţi
dezvoltatori, aceştia sunt capabili de a efectua activităţi de coordonare mai repede şi, potenţial,
de a evita conflicte. Augur este un exemplu de instrument de colaborare de tip awarness. Acesta
oferă o panoramă asupra mai multor aspecte ale dezvoltării proiecului, extras dintr-un depozit al
SCM-ului, astfel, permiţând membrilor echipei de dezvoltare de a fi la curent cu activităţile care
sunt realizate în prezent şi asupra celor din trecut.
1.4 Instrumente de colaborare la nivel de infrastructură
Diferite infrastructuri fac posibilă colaborarea între dezvoltatorii software. Tehnologiile
sotfware de integrare fac posibilă coordonarea muncii inginerilor. Multe forme de integrare
10
includ integrarea datelor, asigurând că instrumentele să schimbe date şi, de asemenea, anumite
instrumente să fie la curent cu activităţile altor instrumente. De exemplu, în mediul Marvel, în
momentul în care un dezvoltator a terminat de editat o secvenţă de cod, aceasta este stocată într-
un depozit central apoi Marvel apelează automat un compilator.
Pentru controlul integrării, există două abordări principale: invocarea directă a
instrumentelor şi serviciul de notificare e evenimentelor. În primul caz, un instrument principal
apelează un alt tool pentru a realiza o anumită sarcină (de exemplu Eclipse). Când mai multe
instrumente trebuie să fie coordonate, abordarea de a trasmite mesaje este recomandată. În acest
caz, instrumentele trimit mesaje notificatoare cu ajutorul unor formulare.
2. Direcţii viitoare în utilizarea tehnologiile colaborative în dezvoltarea
de software
În eforturile de colaborare în ingineria software există anumite domenii care pot fi
îmbunătăţite.
Medile de dezvoltare desktop-based pot spori nivelul de colaborare dacă sunt integrate cu
platforme web-based, o cerinţă care necesită noi standarde de interoperabilitate. Suportul pentru
multi-proiecte şi medii multi-organizationale nu a fost abordat în mod semnificativ în
comunitatea inginerilor software, dar este o preocupare a lor. Inginerii software şi-au însuşit în
mod constant noi obiective cu privirile la tehnologiile de colaborare, adesea adaptându-se la
nevoile proiectului în cadrul căruia lucreza. Un exemplu este acela al reţelelor de jocuri 3D.
O altă sugestie ar fi aceea de a lărgi aria de colaborare dintre clienţi şi dezvoltatorii de
software. De cele mai multe ori, clienţii sunt implicaţi în dezvoltarea de software doar în faza de
definire a cerinţelor şi, uneori, în faza de testare. Invitarea lor la participarea în faza analizei,
proiectării, chiar şi în etapa de scriere a codului, ar aduce un plus colaborării dintre ei.
Tehnologiile enumerate mai sus pot fi înţelese şi de către clienţii care nu au neapărat cunoştinţe
IT. De exemplu, o diagramă UML poate fi înţeleasă de către o persoană non-IT relativ uşor.
Contribuirea clienţilor nu doar la etapele incipiente sau finale ale dezvoltării unui proiect
software ar aduce un plus de responsabilitate clienţilor, aceştia ar înţelege că schimbarea
cerinţelor definite după ce s-au stabilit deja speciicatiile, nu face decât să mărească timpul de
11
finalizare al proiectului. De multe ori, clienţii fac proiectele mult mai complexe decât s-a stabilit
la început.
Neînţelegerea faptului că timpul necesar de finalizare necesită a fi prelungit, îi obliga pe
dezvoltatori să termine softul în timpul estimat iniţial, însă având o calitate scăzute – de aici criza
software cu care ne confruntăm în ultima perioadă.
3. Concluzii
Colaborarea între indivizi – de la utilizatori şi până la dezvoltatori – se află în centrul
ingineriei software moderne. Fie că se referă la activitatea colaborativă pentru a rezolva
probleme, la negocierea pentru a aplana conflicte sau la crearea de soluţii partajate, fie utilizată
din perspectiva socială sau tehnică, colaborarea are un impact important asupra activităţii de
dezvoltare software. Înţelegerea importanţei utilizării tehnologiilor colaborative cobinată cu
scăderea costurilor de comunicaţie va conduce la îmbunătăţirea modului în care inginerii
colaborează pentru a crea produse software de mari dimensiuni.
12
Bibliografie
Articole
1. Adele Goldberg, Collaborative Software Engineering
2. C. R. B. d. Souza, D. F. Redmiles, L.-T. Cheng, D. R. Millen, and J. Patterson, How a
Good Software Practice Thwarts Collaboration - The Mulitple Roles of APIs in Software
Development
3. Schon, Donald A., The Reflective Practitioner: How Professionals Think in Practice
Resurse web
4. ArgoUML
http://argouml.tigris.org/
5. Borland.com, "CaliberRM"
http://www.borland.com/us/products/caliber/index.aspx
6. IBM.com, “Collaborative software development”
http://www-01.ibm.com/software/info/features/collaboration/main.html
7. IBM.com, "Rational RequisitePro"
http://www-01.ibm.com/software/awdtools/reqpro/
8. IBM.com, "Rose",
http://www-01.ibm.com/software/awdtools/developer/rose/
9. Microsoft.com, “Project Professional 2010”
http://www.microsoft.com/project/en/us/project-professional-2010.aspx
10. Ravenflow.com, "RAVEN Product Overview"
http://www.ravenflow.com/products/
11. Wikipedia.org, "List of UML Tools," 2011,
http://en.wikipedia.org/wiki/List_of_UML_tools