Documente Academic
Documente Profesional
Documente Cultură
1[1] Berners-Lee, T., WWW: Past, Present, and Future, IEEE Computer, 29 (10), 1996, pp. 69-77
ca dezvoltarea aplicatiilor necesita mai mult decât experienta în programare2[2].
Dezvoltarea aplicatiiilor web este vazuta ca un eveniment spontan, de obicei bazat
pe cunoastere, experienta si practici de dezvoltare ale dezvoltatorilor individuali,
limitat la reutilizare la modul "Copy & Paste" si în cele din urma caracterizata de o
documentare necorespunzatoare a deciziilor de proiectare. Desi aceasta procedura
poate pare pragmatica, astfel de metode rapide si neadecvate de dezvoltare conduc
deseori la probleme serioase privitoare la calitate si la dificultati de operare si
întretinere. Aplicatiile dezvoltate sunt deseori dependente de tehnologie,
încorporeaza erori si sunt caracterizate prin lipsuri privind performanta, siguranta,
scalabilitatea, atitudinea prietenoasa si chiar întelesul3[3]. Legatura strânsa dintre
aplicatiile web sporeste gravitatea problemei raspândindu-se de la o aplicatie la alta.
Cauza acestei situatii este complexa si poate fi abordata din mai multe perspective:
- abordarea centrata pe documente. Dezvoltarea aplicatiilor web este deseori
considerata centrata pe documente, cum ar fi de exemplu activitatea de authoring
care include crearea si realizarea legaturilor din siturile web dar si includerea
elementelor grafice4[4]. Desi anumite tipuri de aplicatii web (de exemplu paginile
principale, ziarele online) sunt incluse în aceasta categorie, o abordare prin prisma
authoring-ului nu este adecvata pentru dezvoltarea de aplicatii software concentrate
pe web;
- presupusa simplitate a dezvoltarii aplicatiilor web. Disponibilitatea larga a
diferitelor utilitare, cum ar fi editoarele HTML sau generatoarele de formulare
permite crearea de aplicatii web simple care nu necesita cunostinte specializate. De
obicei, accentul se pune pe proiectarea vizuala si nu pe structurarea interna si pe
programare. Aceasta duce la inconsistente si redundanta;
- cunostintele specifice din discipline relevante nu pot aplicate sau utilizate.
Exista o conceptie gresita conform careia dezvoltarea aplicatiilor web este similara
cu dezvoltarea aplicatiilor web traditionale si din acest motiv metodele din ingineria
software pot fi utilizate în sensul abordarii sistematice, cu masuri adecvate de
control a calitatii. Acest lucru este neadecvat în majoritatea cazurilor datorita
caracteristicilor speciale ale aplicatiilor web. În plus, concepte si tehnici din domenii
relevante cum ar fi hypertext sau interactiunea om-calculator nu sunt aplicate într-o
maniera consecventa. Standardele de dezvoltare pentru aplicatiile web de calitate
sunt neexistente, acest lucru datorându-se si relativei scurte istorii a web-ului.
2[2] Pressman, R. S., Can WebApps Be Engineered?, SPC Essentials, Software Productivity Center, May 2000a, la
http://www.spc.ca/essentials/may0300.htm , [vizitat la: 2007-10-01]
3[3] Fraternali, P., Tools and Approaches for Data-intensive Web Applications: A Survey, ACM Computing Surveys,
31 (3), September, 1999, pp. 227-263
4[4] Ginige, A., Lowe, D., Robertson, J., Hypermedia Authoring, IEEE Multimedia, 2 (4), Winter, 1995, pp. 24-35
Practicile curente privind dezvoltarea aplicatiilor web, cresterea complexitatii
si relevantei acestora pentru diverse segmente ale societatii si în particular pentru
functionarea eficienta a proceselor critice ale afacerii (de exemplu comertul
electronic), au evoluat datorita preocuparilor privind acest tip de dezvoltare si
calitatii pe termen lung a aplicatiilor web, acestea având deja o contributie
considerabila la software-ul dezvoltat în prezent5[5].
Proiectarea web nu este un eveniment imediat; este un proces realizat pe tot
parcursul ciclului de viata a aplicatiei web, similar cu proiectarea software-ului. Este
necesara o abordare disciplinara diferita pentru proiectarea web fata de proiectarea
software-ului?
O disciplina poate fi definita ca un domeniu de studiu al stiintei, mai mult sau
mai putin independent care include cercetarea, învatarea si cunoasterea stiintifica
sub forma publicatiilor. Numarul mare de publicatii, cursuri, programe analitice,
seminarii stiintifice si conferinte demonstreaza ca, în acord cu aceasta definitie,
proiectarea web poate fi considerata un domeniu independent a proiectarii
software-ului6[6]. Proiectarea reprezinta în general o aplicatie practica a stiintei
folosita în scopul planuirii aplicatiilor într-un mod mai bun, mai rapid, mai ieftin si
mai sigur. Proiectarea software este definita ca o aplicatie a stiintei si matematicii
prin care capacitatile unui sistem de calcul sunt facute utile oamenilor prin
intermediul programelor, procedurilor si documentatiei asociate7[7]. Pe baza acestei
definitii si a celei lui Despande8[8], putem defini proiectarea web în doua moduri:
- proiectarea web reprezinta aplicarea unei abordari sistematice si
cuantificabile (concepte, metode, tehnici si utilitare) în analiza, proiectarea,
implementarea, testarea, operarea si întretinerea aplicatiilor web de calitatea
superioara;
- proiectarea web reprezinta o disciplina stiintifica implicata în studiul acestei
abordari. Termenii din literatura asociati sunt proiectarea siturilor web9[9],
5[5] Deshpande, Y., Hansen, S., Web Engineering: Creating a Discipline among Disciplines, Special Issue on
6[6] Kappel, G., Michlmayr, E., Web Engineering - Old Wine in New Bottles? Proc. of the 5th International
Conference on Web Engineering (ICWE 2005), Springer LNCS 3255, Munich, Germany, 2005
7[7] Boehm, B. W., Software Engineering, IEEE Transactions on Computers, 25 (12), 1976, pp. 1226-1241
8[8] Deshpande, Y., Murugesan, S., Ginige, A., Hansen, S., Schwabe, D., Gaedke, M., White, B., Web Engineering,
Journal of Web Engineering, 1 (1), 2002, pp. 3-17
9[9] Powell, T., Jones, D., Cutts, D., Web Site Engineering: Beyond Web Page Design, Prentice Hall, 1998.
Pressman, R. S., Can Internet-Based Applications Be Engineered?, IEEE Software, 15 (5), September-
10[10] Lowe, D., Engineering the Web - Web Engineering or Web Gardening? WebNet Journal, 1 (1), January-
March, 1999
11[11] Glushko, R., McGrath, T., Document Engineering for E-business, Proc. of the ACM Symposium on
Document Engineering (DocEng) (held in conjunction with the ACM Int. Conf. on Information and Knowledge
Management, CIKM), Virginia, USA, November 2002
12[12] Reich, S., G¨untner, G., Digital Content Engineering - An Introduction, Proc. of Digital Content Engineering-
Content Plattformen in Theorie und Praxis. Trauner Verlag, 2005
13[13] Balasubramaniam, R., Pries-Heje, J., Baskerville, R., Internet Software Engineering: A Different Class of
Processes, Annals of Software Engineering, 14 (1-4), December, 2002, pp. 169-195
14[14] Glass, R. L., A Mugwump's-Eye View of Web Work, Communications of the ACM, 46 (8), August, 2003,
pp. 21-23
16[16] Pressman, R. S., Applying Web Engineering. In: Software Engineering: A Practitioner's Approach, 6th
Edition, McGraw-Hill, 2005
services). În cele ce urmeaza vom descrie trasaturile relevante ale acestor categorii.
17[17] Weerawarana, S., Curbera, F., Leymann, F., Storey, T., Ferguson, D. F., Web Services Platform Architecture,
18[18] Wege, Ch., Portal Server Technology, IEEE Internet Computing, 6 (3), May-June, 2002, pp. 73-77
facilitând accesul de oriunde. Un exemplu poate fi afisarea meniului zilei pe
dispozitivele mobile ale tuturor utilizatorilor care intra în restaurant între 11 am si 2
pm. Pentru acest tip de sistem este important sa luam în calcul limitarile
dispozitivelor mobile (latimea de banda, dimensiunea ecranului, memoria, lipsa de
maturitate a software-ului) si contextul în care aplicatiile web sunt în mod obisnuit
utilizate.
Dezvoltarile prezente si în special convergenta sporita a domeniului TIMES
(telecomunicatii, tehnologia informatiei, multimedia, educatie si amuzament,
securitate), vor conduce, în viitorul apropiat, la o situatie în care aplicatiile
omniprezente vor domina piata. Unul dintre aceste dezvoltari este web-ul semantic.
Obiectivul web-ului semantic este prezentarea informatiei pe web nu numai pentru
indivizi ci si sub forma usor de citit pentru sistemele de calcul19[19]. Acesta va
facilita managementul cunostintelor pe web si în particular conectarea si reutilizarea
cunoasterii (sindicalizarea continutului), dar si localizarea cunostintelor noi
relevante, cu ajutorul sistemelor recomandate. Datorita interactivitatii crescute la
nivel semantic si posibilitatii executiei sarcinilor automate (prin intermiediul
agentilor intelegenti), putem afirma ca web-ul va deveni mai omniprezent si prin
urmare mai relevant în viata de zi cu zi.
1.2 Caracteristicile aplicatiilor web
Aplicatiile web difera de aplicatiile traditionale (non-web), particularitatile
acestora fiind prezentate în cele ce urmeaza. Acestea sunt pe de o parte
caracteristicile de care aplicatiile traditionale nu au nevoie (de exemplu navigarea
non-liniara) si caracteristicile care prezinta o importanta particulara (de exemplu
frecventa actualizarilor), pe de alta parte.
Chiar daca o anumita caracteristica este prezenta si depinde într-o anumita
masura de tipul de aplicatie web, dezvoltarea aplicatiilor web tranzactionale cum ar
fi sistemele de e-commerce necesita o focalizare mai atenta asupra actualizarii si
consistentei continutului comparativ cu sistemele informationale pure - de exemplu
prezentarile virtuale. Aceste caracteristici sunt motivul pentru care numeroase
concepte, metode, tehnici si utilitare ale proiectarii software traditionale trebuie
adaptate la cerintele proiectarii web, desi în unele situatii acestea pot fi în totalitate
neadecvate. Figura 1.2 ne ofera o imagine a acestor caracteristici si le împarte în trei
dimensiuni: "produs", "utilizare" si "dezvoltare", împreuna cu "evolutia" vazuta ca o
dimensiune atotcuprinzatoare.
19[19] Berners-Lee, T., Hendler, J., Lassila, O., The Semantic Web, Scientific American, May, 2001
Figura 1.2 Dimensiunile conform cu standardul ISO/IEC 9126-1 pentru clasificarea
caracteristicilor aplicatiilor web
(http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumb
er=22749)
20[20] Bush, V., As We May Think, The Atlantic Monthly, 176 (1), 1945, pp. 101-108.
La nivelul prezentarii, principalele doua caracteristici ale aplicatiilor web sunt
estetica si auto-explicarea.
Estetica. Spre deosebire de aplicatiile traditionale, estetica la nivelul
prezentare a aplicatiilor web, elementul "look and feel" al interfetei utilizator este
factorul central datorita presiunii competitive ridicate de pe web. Prezentarea
vizuala a paginilor web este un subiect la moda si deseori determina succesul sau
esecul, în special pentru aplicatiile de e-commerce21[21].
Auto-explicarea. Dincolo de estetica, este esential ca aplicatiile web sa fie
auto-explicative, respectiv sa fie posibila utilizarea aplicatiei web fara a consulta o
documentatie în prealabil. Sistemul de navigare sau cel care implica interactiunea
trebuie sa fie consistent în întreaga aplicatie, astfel încât utilizatorii sa devina
familiari cu utilizarea aplicatiei web.
1.2.2 Caracteristici asociate utilizarii
Comparativ cu aplicatiile traditionale, utilizarea aplicatiilor web este extrem
de eterogena. Utilizatorii difera prin prisma numarului si culturii generale,
dispozitivele folosite având caracteristici hardware si software diferite, iar ora si
locatia de unde este accesata aplicatia nu poate fi prevazuta. Dezvoltatorii nu au
posibilitatea de a cunoaste apriori potentiala diversitate a acestor factori contextuali
si nu-i pot influenta în nici un mod datorita naturii lor autonome. Este greu chiar si sa
prezicem frecventa de utilizare a unei aplicatii web.
Utilizarea aplicatiilor web este prin urmare caracterizata de necesitatea
adaptarii continue la situatii de utilizare specifice (contexte). Reglarea acestor
contexte poate fi necesara în mod egal pentru toate partile aplicatiilor web
(continut, hipertext si prezentare). Datorita semnificatiei ajustarii contextului,
caracteristicile asociate utilizarii sunt împartite în trei grupuri: context social, context
tehnic si context natural.
21[21] Pressman, R. S., Can WebApps Be Engineered?, SPC Essentials, Software Productivity Center, May 2000a,
http://www.spc.ca/essentials/may0300.htm
cazul intranet-ului sau extranet-ului) aceasta poate fi comparabila cu aplicatiile
traditionale. Când dezvoltam o aplicatie web pentru un grup anonim de utilizatori,
vor exista elemente eterogene evidente în ceea ce priveste abilitatile (sau
incapacitatile), cunoasterea (expertiza aplicatiei) si preferintele (interesele). Pentru a
permite o personalizare adecvata, presupunerile privind contextul utilizatorilor
trebuie facut în faza de dezvoltare a aplicatiilor web. Acest aspect va fi luat în
considerare atunci când adaptam componentele aplicatiei. Clientii obisnuiti pot avea
reduceri speciale (adaptarea contextului), noii clienti pot receptiona un ghid pentru
aplicatia web (adaptarea hipertextului) si utilizatorii cu deficiente vizuale pot fi
sprijiniti prin folosirea unor dimensiuni adecvate ale fontului (adaptarea prezentarii).
Personalizarea necesita deseori specificarea preferintelor utilizatorilor (de exemplu
metoda preferata de plata pe http://www.amazon.com ).
Contextul tehnic: Reteaua si dispozitivele
Contextul tehnic include proprietati legate de conexiunile în retea privitoare
la calitatea serviciului si componentele hardware si software ale dispozitivelor
utilizate pentru a accesa aplicatia web, pentru o distribuire multi-platforma.
Calitatea serviciului. Din punct de vedere tehnic, aplicatiile web sunt bazate
pe principiul client/server. Caracteristicile mediului de transmisie, cum ar fi latimea
de banda, siguranta si stabilitatea conexiunii sunt factori independenti care trebuie
luati în considerare când dezvoltam o aplicatie web pentru a garanta o calitate
adecvata a serviciului. De exemplu, parametrul latimea maxima de banda poate fi
ajustat pentru a optimiza cantitatea de date transferata, astfel încât continutul
multimedia (clipuri video) va fi transferat la o rezolutie scazuta în situatia unei latimi
de banda mici. În timp ce în aplicatiile traditionale specificatiile retelei sunt
cunoscute dinainte, dezvoltatorii aplicatiilor web trebuie sa faca supozitii privitor la
aceste proprietati. Datorita tendintei de orientare catre aplicatiile web mobile, acest
aspect este de o importanta sporita, asa cum retelele convergente necesita o mai
multa adaptare la nivelul aplicatiei.
Distribuirea multi-plaforma. Aplicatiile web ofera de obicei servicii nu doar
unui anumit tip de dispozitiv ci si dispozitivelor mobile cu specificatii diferite
(dimensiunea monitorului, capacitatea memoriei, software-ul instalat). Numarul
mare de versiuni ale browserului reprezinta o provocare datorita diferitelor
functionalitati si restrictii ale acestora (deseori acestea nu implementeaza
specificatiile presupuse). Acest lucru determina dificultati în crearea unei interfete
utilizator consistente si în testarea aplicatiilor web.
În plus, utilizatorii pot configura browserele în mod autonom. Prezentarea
(ascunderea imaginilor), drepturile de acces (applet-urile Java) si o serie de functii
(cookies, caching) pot fi toate configurate individual, acestea având influente asupra
performantei, functionalitatii tranzactiilor si posibilitatii de interactiune.
Pe baza presupunerilor privind clasele tipice de dispozitive, dezvoltatorii
aplicatiilor web pot adapta continutul la PDA-uri (personal digital assistants) prin
netransmiterea imaginilor sau clipurilor video si oferirea în schimb a legaturilor si
textului descriptiv. La nivel hipertext, putem oferi versiunea pentru listare a
documentelor hipertext. Pentru a lua în calcul diferitele versiuni de Javascript din
varietatea de browsere, pot fi utilizate librarii independente de platforma în procesul
de dezvoltare (vezi http://www.domapi.com ).
Integrarea
Caracteristica speciala a aplicatiilor web este nevoia de integrarea interna si
externa. În acest context, integrarea se refera nu numai la aspectele tehnice, dar si la
continut si la aspectele organizationale.
Integrarea interna. Frecvent, aplicatiile web trebuie integrate cu sistemele de
mostenire existente când continutul existent (de ex. cataloagele de produse) va fi
facut disponibil aplicatiei web.
Integrarea externa. Integrarea continutului si a servicilor aplicatiilor web
externe reprezinta o caracteristica speciala a aplicatiilor web. Dintre particularitatile
integrarii pe web mentionam:
- existenta unui numar mare de surse care se schimba frecvent si cu un grad
înalt de autonomie;
- se cunosc putine detalii privitoare la proprietatile acestor surse, cum ar fi
continutul si functionalitatile;
- diferite surse sunt adesea foarte eterogene la diverse nivele (nivelul datelor,
schemei sau modelului de date).
Integrarea serviciilor externe în aplicatiile web orientate pe portaluri se
bazeaza pe cresterea formelor de dezvoltare comune a furnizarii si utilizarii
serviciilor web. În acest context, un serviciu web este o componenta reutilizabila cu
o interfata si functionalitate foarte clar definita. Interactiunea diferitelor servicii web
si garantarea calitatii serviciilor sunt câteva dintre problemele relevante ale acestui
context.
1.2.4 Evolutia
Evolutia este o caracteristica care guverneaza toate cele trei dimensiuni ale
produsului, utilizarii si dezvoltarii. Necesitatea evolutiei poate fi argumentata prin
22[22] McDonald, A., Welland, R., A Survey of Web Engineering in Practice, Department of Computing
Science
Schimbarea continua
Aplicatiile web se schimba rapid si sunt în consecinta într-o evolutie
permanenta datorita schimbarii constante a cerintelor sau conditiilor23[23].
Schimbarea rapida si permanenta a tehnologiilor web si a standardelor în particular,
necesita o adaptare continua a aplicatiilor web la acestea. Aceasta schimbare are
doua cauze:
- utilizatorii doresc ultimile aplicatii web;
- instrumentele utilizate sunt conditionate de tehnologie.
Schimbarile constante ale cerintelor si conditiilor reprezinta caracteristica
centrala a aplicatiilor web, acestea afectând toate cele trei dimensiuni ale aplicatiilor
web - produsul însusi, utilizarea acestuia si în particular dezvoltarea lui.
Presiunea competitiva
23[23] Scharl, A., Evolutionary Web Development - Automated Analysis, Adaptive Design, and Interactive
Visualization
24[24] Kotonya, G., Sommerville, I., Requirements Engineering: Processes and Techniques,
John Wiley & Sons,
1998
Împuternicitii reprezentativi pentru aplicatiile web includ autorii de continut, expertii
în domeniu, experti în caracterul utilizabil sau profesionistii în domeniul marketing-
ului. Obiectivele si asteptarile împuternicitilor sunt de obicei diverse, asa cum o
demonstreaza urmatoarele exemple:
- aplicatia web trebuie sa fie disponibila online pâna la 1 septembrie 2007
(constrângerea clientului);
- aplicatia web trebuie sa suporte minim 2500 utilizatori concurenti (obiectiv de
calitate a clientului);
- PHP trebuie folosit ca platforma de dezvoltare (perspectiva tehnologica a
dezvoltatorilor);
- toate datele clientilor trebuie trimise securizat (obiectiv de calitate al utilizatorului);
- interfata utilizator trebuie sa suporte layout-uri pentru grupuri diferite de clienti
(obiectiv de calitate al clientului);
- orice utilizator trebuie sa poata cauta produsul dorit în mai putin de trei minute
(obiectiv privind caracterul utilizabil pentru client);
- utilizatorul trebuie sa aiba posibilitatea sa selecteze o iconita care sa afiseze
articolele incluse în card-ul de cumparaturi în orice moment (obiectiv privind
capacitatea utilizatorului).
Identificarea si implicarea cu succes a împuternicitilor este sarcina principala a
managementului proiectelor. O mare provocare o constituie întelegerea si aplanarea
frecventelor conflicte privind obiectivele, asteptarile si ordinea de zi. De exemplu,
pot exista conflicte între setul dorit de functionalitati si bugetul disponibil; între setul
de functionalitati, planul proiectului si calitatea dorita; sau între tehnologia de
dezvoltare dorita si aptitudinile si experientele dezvoltatorilor. Întelegerea si
rezolvarea din timp a acestor contradictii si conflicte este hotarâtoare si este
importanta pentru managementul riscului. Exista o serie de tehnici de negociere
pentru a suporta aceasta sarcina. În acest proces, dezvoltarea unei viziuni
împartasite între împuterniciti este o conditie pentru succes.
Obiectivele împuternicitilor sunt deseori prezentate neoficial si ofera baza pentru
cerinte derivate mult mai detaliate.
O cerinta descrie proprietatea de a fi cunoscuta sau a unui serviciu de a fi furnizat de
catre un sistem. IEEE 610.12 defineste o cerinta ca:
- o conditie sau aptitudine necesara unui utilizator pentru a rezolva o problema sau a
duce la bun sfârsit un obiectiv;
- o conditie sau aptitudine care trebuie îndeplinita sau posedata de un sistem sau
componenta sistem pentru a satisface un contract, standard, specificatie sau alte
documente solicitate formal;
- o reprezentare documentata a unei conditii sau aptitudini.
Cerintele sunt clasificate deseori în cerinte functionale, cerinte non-functionale si
constrângeri25[25]. Cerintele functionale definesc capacitatea sistemelor si
serviciilor, în timp ce cerintele non-functionale descriu nivelul de calitate dorit ("Cât
este de securizat?", "Cât este de usor de folosit?"). Constrângerile sunt conditii non-
negociabile care afecteaza proiectul. Exemple de constrângeri sunt nivelul de
pricepere a echipei de dezvoltare, bugetul disponibil, data livrarii sau infrastructura
de calculatoare existenta în echipa de dezvoltare.
Un document cu solicitarile rezuma toate cerintele si constrângerile dintre
contractor si client. Abordarile uzitate în proiectarea cerintelor pun accentul pe
identificarea si implicarea împuternicitilor, negocierea si descoperirea cerintelor pe
baza de scenarii, analiza contextului organizational si social anterior modelarii
detaliate si o definire clara a constrângerilor care afecteaza dezvoltarea26[26].
2.1.2 Activitatile proiectarii cerintelor
Proiectarea cerintelor implica extragerea, documentarea, verificarea si validarea, dar
si managementul cerintelor de pe parcursul procesului de dezvoltare.
Extragerea cerintelor si negocierea
Lowe si Eklund27[27] au demonstrat ca cerintele nu pot fi colectate prin întrebari
adecvate ci sunt rezultatul procesului de învatare si construirii pe baza de consens. În
acest proces, comunicarea dintre împuterniciti este esentiala. Un set larg de metode
si utilitare colaborative sunt disponibile pentru a facilita comunicarea si schimbul
cunoasterii în proiectarea cerintelor. Astfel de exemple sunt tehnici de creativitate,
metode bazate pe scenarii, procese pentru decizii multicriteriu, interviuri sau analiza
documentelor.
Documentarea cerintelor
Daca împuternicitii ajung la un consens, acordul dintre acestia trebuie rafinat si
descris într-un document al cerintelor în functie de gradul detaliilor si formalismelor
adecvate contextului proiectului. Alegerea gradului adecvat de detalii si a
formalismelor depinde de riscurile identificate ale proiectului, de experienta si
aptitudinile presupusilor cititori.
25[25] Robertson, S., Robertson, J., Mastering the Requirements Process, Addison-Wesley,
1999
26[26] Boehm, B. W., Requirements that Handle IKIWISI, COTS, and Rapid Change, IEEE
Computer, 33 (7),
27[27] Lowe, D. B., Eklund, J., Client Needs and the Design Process in Web Projects, Journal
of Web Engineering,
28[28] Deshpande, Y., Murugesan, S., Ginige, A., Hansen, S., Schwabe, D., Gaedke, M.,
White, B., Web Engineering,
29[29] Nuseibeh, B., Weaving Together Requirements and Architectures, IEEE Computer, 34 (3), March, 2001,
pp. 115-117
Atribut Comentariu Exemplu
Cerinte care Lista cerintelor care 4.5.6
intra în sunt în conflict cu
conflict aceste cerinte
particulare
Informatii Trimiteri la informatii Recomandari privind
aditionale aditionale usurinta în folosire v1.2
Istoricul Numarul reviziei 1.06
versiunii documentului din
istoricul dezvoltarii
Tabel: Specificatii de formatare
Calitatea interfetei utilizator
Calitatea interfetei utilizator este un alt aspect hotarâtor pentru succesul aplicatiilor
web. Când realizeaza aplicatii web dezvoltatorii trebuie sa fie constienti de
urmatorul fenomen: utilizatorii nu vor fi capabili sa înteleaga si sa aprecieze o
aplicatie web uitându-se la modele si specificatii abstracte; ei trebuie sa
experimenteze. De aceea, este esential sa completam definitia si descrierea
cerintelor prin adaugarea unor prototipuri pentru scenariile importante ale
aplicatiei30[30].
Calitatea continutului
Majoritatea metodelor de proiectare a cerintelor traditionale neglijeaza continutul
web desi este un aspect important al aplicatiilor web. Pe lânga problemele generate
de tehnologia software dezvoltatorii trebuie sa aiba în vedere continutul si în special
crearea si întretinerea acestuia. În contextul proiectarii cerintelor este esential sa
specificam nivelul de calitate cerut. Cele mai importante caracteristici de calitate
includ acuratetea, obiectivitatea, credibilitatea, relevanta, actualitatea, caracterul
complet sau claritatea. Sistemele de management al continutului (CMS) au devenit
importante si permit reprezentarea concisa si consistenta a continutului prin
separarea continutului de layout si oferirea utilitarelor de editare a continutului.
Lipsa de experienta a dezvoltatorilor
Majoritatea tehnologiilor de baza din aplicatiile web sunt relativ noi. Lipsa de
experienta cu instrumentele de dezvoltare care folosesc aceste tehnologii,
standardele si limbajele pot conduce la estimari gresite când se ia în discutie
fezabilitatea sî costul implementarii cerintelor.
30[30] Constantine, L., Lockwood, L., Software for Use: A Practical Guide to Models and Methods for Usage-
31[31] Biffl, S., Aurum, A., Boehm, B. W., Erdogmus, H., Gr¨unbacher, P., Value-based Software Engineering,
Riscuri
Problemele nedetectate, cele nerezolvate si conflictele dintre cerinte reprezinta
riscuri majore ale proiectelor. Problemele obisnuite de risc sunt integrarea
componentelor existente în aplicatia web, anticiparea aspectelor de calitate a
sistemului sau lipsa de experienta a dezvoltatorilor. De aceea evaluarea riscului
trebuie adaptata pentru toate cerintele. Odata identificate, riscurile trebuie
administrate pe parcursul proiectului, pentru a ne asigura ca nu sunt urmate
alternative riscante pentru sistem. Diminuarea riscului trebuie realizata cât mai
rapid. Aceasta poate include de exemplu prototipizarea, lansarea rapida a aplicatiei
web pentru a colecta feedback-ul utilizatorilor sau încorporarea precoce a
componenetelor externe pentru a elimina problemele majore ale integrarii tardive.
2.4 Adaptarea metodelor de proiectare a cerintelor dezvoltarii aplicatiilor web
În prezent sunt disponibile numeroase metode, ghiduri, notatii, cataloage si utilitare
pentru toate activitatile de proiectare a cerintelor. Dezvoltatorii trebuie sa evite o
abordare unitara, metodele de proiectare a cerintelor trebuind adaptate permanent
specificului proiectarii web si situatiilor care apar în anumite proiecte. Principiile
descrise anterior ne conduc la definirea unei abordari de proiectare a cerintelor
specifice proiectelor. Dezvoltatorii trebuie sa clarifice urmatoarele aspecte pe
parcursul procesului de adaptare:
- Ce tipuri de cerinte sunt importante pentru aplicatiile web?
- Cum vor fi descrise si documentate cerintele pentru aplicatiile web?
- Care sunt gradele utile ale detalierii?
- Trebuie avuta în vedere folosirea utilitarelor si care dintre acestea sunt potrivite
pentru nevoile specifice ale proiectului?
32[32] Robertson, S., Robertson, J., Mastering the Requirements Process, Addison-Wesley, 1999
34[34] Chung, L., Nixon, B. A., Yu, E., Mylopoulos, J., Non-Functional Requirements in Software Engineering,
2.4.2 Notatii
Sunt disponibile diferite notatii pentru specificarea cerintelor la nivele diferite de
detaliere si formalitate. Exemple: relatari, specificatii de formatare, specificatii
formale.
Riscurile identificate ale proiectului ofera repere în alegerea nivelului potrivit al
specificatiilor de calitate (de exemplu stabilirea gradului de specificare a cerintelor
dintr-un anumit proiect). În general abordarile informale si semiformale sunt
adecvate pentru aplicatiile web, iar tabelul urmator (vezi tabelul) prezinta notatii
diferite pentru cerinte.
35[35] Constantine, L., Lockwood, L., Software for Use: A Practical Guide to Models and Methods for Usage-
Cerintele specificate
Cerintele specificate sunt simple specificatii în limbajul natural. Fiecare cerinta are
un identificator unic. Un bun exemplu este descrierea unui element de tip data
specificat în IEEE/EIA-J-STD- 016.
37[37] Chen, P., The Entity-RelationshipModel - Toward a Unified View of Data, ACM
Transactions on Database
38[38] OMG (Object Management Group), UML 2.0 Superstructure Specification - Revised
Final Adopted
39[39] Fraternali, P., Tools and Approaches for Data-intensive Web Applications: A Survey,
ACM Computing
40[40] Ceri, S., Fraternali, P., Bongio, A., Brambilla, M., Comai, S., Maristella, M., Designing Data-Intensive
Figura 3.8 Model de acces simplificat la al modelului de structura din Figura 3.7
Relatia cu modelarea continutului
În functie de metoda de modelare de baza, modelul hipertext este mai mult sau mai
putin dependent de modelul de continut. Exista atât o dependenta la nivel de model
(de exemplu ce clase din modelul de continut formeaza un anumit nod în modelul
hipertext si la nivel de instanta - ce set de obiecte din modelul de continut populeaza
acel nod din modelul hipertext. Nu toate metodele descriu dependente între
modelul de continut si modelul hipertext. Totusi unele metode specifica o derivare
directa a hipertextului de la continut prin definirea nodurilor pe baza vizualizarilor.
3.5 Modelarea prezentarii
Similar cu modelarea software clasica, modelarea prezentarii trateaza interfata
utilizator si necesita prezentarea aspectului unei aplicatii web. Spre deosebire de
aplicatiile traditionale elementul central al prezentarii din aplicatiile web este pagina
ca unitate de vizualizare.
Obiective
Modelarea prezentarii este realizata în momentul proiectarii structurii si
comportamentului interfetei utilizator pentru a asigura interactiunea cu aplicatia
web într-un mod simplu si auto-explicativ. În plus, se tine cont de aspectele de
comunicare si de reprezentare ale aplicatiei web. Modelarea prezentarii genereaza
un rezultat dublu: în primul rând produce un concept de prezentare uniforma prin
modelarea elementelor recurente din pagini (de exemplu antete si subsoluri de
pagina). Modelarea prezentarii ar trebui în mod ideal sa afiseze structura fiecarei
pagini si proiectarea câmpurilor textelor, imaginilor, formularelor etc., incluse în
aceste pagini. În al doilea rând, pe lânga structura paginilor modelul de prezentare
descrie aspecte comportamentale ale interfetei utilizator (de exemplu pe ce buton
se va executa clic pentru a activa o functie din logica aplicatiei). Datorita diversitatii
mari a optiunilor de navigare si riscului inerent al ratacirii utilizatorilor, trebuie avut
în vedere acordarea unui sistem de ajutor pentru orientarea utilizatorilor la nivelul
prezentarii. Aceasta poate fi realizata, de exemplu, prin afisarea caii de navigare
curente sau a paginilor vizitate pe parcursul sesiunii active.
Nu toate metodele disponibile pentru modelarea aplicatiilor web suporta
concepte de modelare a prezentarii independente de tehnologie; unele utilizeaza
concepte specifice tehnologiei, cum ar fi limbajele pentru stiluri (cum ar fi XSL -
Extensible Stylesheet Language).
Un alt factor important pentru aplicatiile web este proiectarea grafica a
layout-ului pentru interfata utilizator, care deseori este realizata de un grafician pe
baza unor schite de baza sau conceputa prin implementarea paginilor prototip cu
ajutorul utilitarelor.
Concepte
Elementele modelului sunt descrise pe trei nivele ierarhice:
- O pagina de prezentare descrie o pagina prezentata utilizatorului ca o unitate de
vizualizare. Poate fi compusa din diferite unitati de prezentare.
- O unitate de prezentare este utila pentru gruparea elementelor interfetei utilizator
si reprezinta un fragment logic al paginii. Prezinta un nod ce deriva din modelul
hipertext.
- Un element de prezentare este blocul de baza al modelului prezentare. Elementele
de prezentare sunt un set de informatii ale nodului si pot include text, imagini, audio
etc.
Putem vizualiza structura paginilor de prezentare pe baza reprezentarii unei
diagrame de clasa UML imbricate cunoscuta sub numele de "structura", asa cum se
poate observa în figura 3.9. Acest exemplu utilizeaza clasele stereotip <<pagina>> si
<<unitate de prezentare>> pentru a descrie paginile de prezentare si unitatile de
prezentare. Toate tipurile de elemente de prezentare sunt de asemenea proiectate
prin stereotipuri UML adecvate. Figura 3.9 ilustreaza doua pagini de prezentare ale
sistemului de recenzie. Un articol este plasat pe o pagina numita "Pagina Articolului"
împreuna cu câmpurile aferente, o legatura catre versiunea completa a articolului si
o legatura pentru a afisa autorii articolului. În plus, utilizatorii pot apasa un buton
pentru a adauga o noua recenzie. Pagina "Pagina Autorului" are doua unitati de
prezentare - lista tuturor autorilor si informatia detaliata despre fiecare autor.
Figura 3.11 Diagrama secventiala pentru extragerea unei liste de articole atribuite
HDM-Lite
OOHDM
WebSA
WAE2
OO-H
OOWS
W2000
WSDM
UWE
WAE
UML
OMT
- Metodele orientate pe date - îsi au originea în domeniul sistemelor de baze de
date si se bazeaza în principal pe un model entitate-relatie îmbunatatit prin
concepte specifice pentru modelarea la nivel hipertext. Principalul obiectiv al acestor
metode este modelarea aplicatiilor web care folosesc bazele de date. Exemple de
astfel de metode sunt RMM (Relationship Management Methodology), Hera si
WebML (WebModeling Language41[41]).
- Metodele orientate pe hipertext - se focalizeaza pe caracterul hipertext al
aplicatiilor web; ele deriva în principal din domeniul sistemelor hipertext. Cele mai
reprezentative exemple sunt: HDM (Hypertext Design Model) care a fost extinsa
ulterior în W2000, sau WSDM (Web Site Design Method).
- Metodele orientate pe obiecte - se bazeaza fie pe OMT (primele metode aparute)
sau UML (cele mai recente). UML este notatia preferata atunci când se alege un
limbaj standard pentru modelare. Aceasta categorie include OOHDM (Object-
Oriented Hypermedia Design Method), UWE (UML-based Web Engineering), OOWS
(Object-Oriented Web Solutions42[42]) si OO-H (Object-Oriented Hypermedia).
41[41] Ceri, S., Fraternali, P., Bongio, A., Brambilla, M., Comai, S., Maristella, M., Designing Data-Intensive
42[42] Pastor, O., Pelechano, V., Fons, J., Abrah~ao, S., Conceptual Modelling of Web Applications: the OOWS
Approach. In: Web Engineering - Theory and Practice of Metrics and Measurement for Web Development,
43[43] Conallen, J., Building Web Applications with UML, 2nd edition, Addison-Wesley, 2003
personalizare) specifice web-ului. Metode precum WebML, OO-H si UWE reprezinta
fundamentul abordarii bazate pe modele pentru dezvoltarea aplicatiilor web; ele
includ unele transformari semi-automate bazate pe model.
WebSA (Web Software Architecture) este o alta abordare bazata pe model pentru
domeniul web-ului si foloseste paradigma MDA (Model-DrivenArchitecture).
Asemanator cu MDA, WebSA se focalizeaza pe construirea de modele independente
de platforma si ulterior construirea automata a modelelor specifice platformei.
Utilitare
Datorita ciclurilor de dezvoltare scurte si complexitatii aplicatiilor web este
recomandata utilizarea de instrumente care permit nu doar modelarea ci si
generarea automata a codului si verificarea consistentei modelului. Principalele
utilitare de acest tip sunt: WebRatio Site Development Studio, VisualWADE si
OpenUWE Suite.
WebRatio Site Development Studio
WebRatio Site Development Studio (http://www.webratio.com) este un instrument
de dezvoltare bazat pe modele care construieste folosind Web Modeling Language
(WebML) (http://www.webml.org). Acest utilitar foloseste propriile notatii pentru
modelarea hipertext si suporta notatii ER si UML. Generatorul de cod al
instrumentului utilizeaza XSL pentru a transforma modelele de continut si hipertext
prezentate în XML în bazele de date necesare si conexiuni la baza de date dar si în
componente software si diferite formate de iesire (HTML, WML, PDF, Microsoft
Word). WebRatio foloseste un instrument numit EasyStyle pentru a genera
prezentarea paginilor, care va transforma automat paginile adnotate în foi de stiluri
XSL, fara a solicita alte activitati de programare. Aplicatia web generata cu ajutorul
WebRatio este trimisa apoi în cadrul de lucru bazat pe un set de componente Java
care pot fi configurate prin utilizarea fisierelor XML.
VisualWADE
Instrumentul VisualWADE (http://www.visualwade.com) se bazeaza pe metoda OO-
H. Acest instrument suporta modelarea si generarea automata a aplicatiilor bazate
pe XML, ASP, JSP si PHP. VisualWADE adauga la modelul UML alte doua modele:
"Vizualizarea Navigarii" (utilizata pentru a modela aspectul hipertext al aplicatiei
web) si "Vizualizarea Prezentarii" (reprezinta elementele de interactiune ale
interfetei utilizator cu privire la structura si comportamentul acesteia utilizând
anumite structuri de tip template). Aceasta produce o descriere independenta de
dispozitiv a interfetei utilizator, care poate fi utilizata de generatoare în vederea
obtinerii automate a aplicatiei web pentru medii si dispozitive de rulare distincte.
OpenUWE
Suita de utilitare OpenUWE (http://www.pst.ifi.lmu.de/projekte/uwe) este un mediu
de dezvoltare pentru proiectarea si generarea aplicatiilor web folosind metodologia
UWE. Principala facilitate a acestei suite este reprezentata de arhitectura deschisa
bazata pe standardele consacrate. Mediul de dezvoltare OpenUWE include
instrumentul CASE ArgoUWE si cadrul de lucru UWEXML care consta într-un motor
de verificare a consistentei modelului, un editor al layout-ului si un generator de cod
pentru cadrul de lucru Cocoon XML Publishing44[44] si JSP.
Instrumentul CASE ArgoUWE se bazeaza pe instrumentul CASE open-source
ArgoUML (http://www. argouml.org), suporta notatia UWE si verifica consistenta
modelelor în functie de constrângerile OCL specificate pentru meta-modelul UWE.
3.8 Concluzii
În ultima decada au fost dezvoltate numeroase metode de modelare a aplicatiilor
web. Este greu de anticipat momentul în care se va ajunge la un limbaj de modelare
web unificat ("Unified Web Modeling Language") similar dezvoltarii UML-ului.
Includerea serviciilor web în dezvoltarea aplicatiilor web bazate pe modele va aduce
noi provocari, cea mai importanta fiind interactiunea dintre modelarea de sus în jos
si de integrarea de jos în sus a serviciilor existente.
IV. Arhitecturile aplicatiilor web
Calitatea aplicatiilor web este influentata semnificativ de arhitectura acestora. Lipsa
aspectelor arhitecturale influenteaza în mod negativ cerintele privind calitatea
aplicatiilor web. Performanta scazuta, întretinerea si extinderea insuficienta si slaba
disponibilitate a unei aplicatii web sunt deseori cauzate de o arhitectura neadecvata.
Pe lânga constrângerile tehnice precum disponibilitatea serverelor web, serverele de
aplicatii utilizate sau integrarea sistemelor de mostenire, arhitecturile aplicatiilor
web trebuie sa ia în considerare si cadrul de lucru organizational în care ele sunt
incluse (de exemplu experienta arhitectilor). Utilizarea unor arhitecturi multi-strat
flexibile, tratarea continutului multimedia si integrarea depozitelor de date existente
sunt stringente pentru dezvoltarea arhitecturii aplicatiilor web. Vom discuta în
continuare proprietatile generale ale arhitecturilor, influenta cunostintelor
arhitecturale existente sub forma sabloanelor si cadrelor de lucru asupra calitatii
aplicatiilor web si arhitecturi reprezentative pentru aplicatii web împreuna cu
componentele necesare construirii acestora.
Când dezvoltam aplicatii web trebuie sa luam în considerare un numar mare de
cerinte si constrângeri, începând cu cerinte functionale (comenzile de produse
online) si cerinte de calitate (performanta si disponibilitatea) si pâna la integrarea
sistemelor software existente (asa numitele sisteme de mostenire sau depozitele de
date existente pe care aplicatiile web ar trebui sa le citeasca). În mod normal,
aplicatiile web nu sunt dezvoltate "din nimic" în ceea ce priveste infrastructura
tehnica; deseori trebuie extinsa sau adaptata o infrastructura existenta. Pe lânga
constrângerile pur tehnice, putem identifica alte aspecte cum ar fi viabilitatea
economica a infrastructurii tehnice.
44[44] Ziegeler, C., Langham, M., Cocoon: Building XML Applications, Sams, July, 2002
4.1 Generalitati
Definirea arhitecturii
Nu exista o definitie unica a termenului "arhitectura", renumitul institut de
proiectare a software-ului (SEI -Software Engineering Institute) din cadrul
Universitatii Carnegie-Mellon (http://www.sei.cmu.edu) oferind peste 20 de variante
explicative. În loc de a adauga o alta varianta, vom încerca sa descriem principalele
proprietati ale arhitecturilor software:
- arhitectura descrie structura: arhitectura sistemelor software consta în structura
acestora, descompunerea în componente, interfata si relatiile dintre ele45[45].
Arhitectura descrie atât aspectele statice cât si cele dinamice ale sistemului
software, astfel încât este necesara construirea de diagrame de flux pentru un
produs software.
- arhitectura face tranzitia de la analiza la implementare: Când cream arhitectura
încercam sa descompunem cerintele functionale si cele de calitate în componente
software, relatii si interfete într-un mod iterativ. Acest proces este sustinut de mai
multe abordari, cum ar fi Procesul Unificat.
- arhitectura poate fi abordata din diferite puncte de vedere, în functie de care se
pot specifica aspecte arhitecturale distincte. Se remarca urmatoarele puncte de
vedere:
* abordarea conceptuala - identifica identitatile domeniului aplicatiei si relatiile
dintre acestea
* abordarea în functie de momentul rularii - descrie componentele în momentul
rularii sistemului (de exemplu servere sau cai de comunicatie)
* abordarea pe procese - mapeaza procesele în momentul rularii sistemului, avându-
se în vedere aspecte precum sincronizarea si concurenta
* abordarea în functie de implementare - descrie artefactele software-ului si include
subsisteme, componente sau cod sursa.
Aceasta clasificare în functie de diferitele puncte de vedere este de asemenea
sustinuta si de limbajele de modelare (de exemplu UML).
- arhitectura face sistemul mai inteligibil: structurarea sistemelor software si
descompunerea acestora ne permit un management mai bun al complexitatii
sistemelor software, sistemele devenind astfel mai usor de înteles.
- arhitectura reprezinta cadrul de lucru pentru un sistem flexibil: Tom DeMarco se
refera la arhitectura ca la un "cadru al schimbarii" (de exemplu arhitectura software
formeaza cadrul în care un sistem software poate evolua). Daca extinderea unui
sistem nu a fost luata anterior în calcul, atunci aceasta va fi greu de realizat.
Având în vedere proprietatile mentionate, putem afirma ca deciziile arhitecturale au
o importanta majora în dezvoltarea aplicatiilor web.
Dezvoltarea arhitecturilor
45[45] Bass, L., Clements, P., Kazman, R., Software Architecture in Practice, Addison-Wesley, 1998
Cerintele software-ului si arhitectura acestuia sunt într-o continua schimbare.
Constrângerile tehnice si de organizare se modifica pe parcursul si dupa dezvoltarea
unei aplicatii. Aceasta se poate datora unor cerinte neclare de la începutul
procesului de dezvoltare sau unei schimbari a cerintelor dupa finalizarea sistemului.
Din acest motiv sistemele software sunt deseori numite "tinte în miscare". Figura 4.1
ilustreaza factorii si constrângerile care influenteaza dezvoltarea unei arhitecturi
conform opiniei lui Jacobson46[46].
Figur
a 4.1
Facto
ri
care
influe
nteaz
a
dezvo
ltarea
unei
arhitecturi
Arhitectura unei aplicatii este influentata în principal de cerintele functionale -
serviciile oferite de un sistem- si consideratiile privind calitatea (scalabilitatea sau
performanta). Dincolo de aceste cerinte, arhitecturile sunt influentate de
constrângeri tehnice cum ar fi sistemul software utilizat (de exemplu sistemul de
operare), middleware (de exemplu implementarea CORBA), sistemele de mostenire
care vor fi integrate, standardele utilizate, regulile de dezvoltare (de exemplu ghiduri
de scriere a codului) sau aspectele de distribuire (de exemplu distribuirea în diverse
locatii a unei companii).
Deoarece sistemele software sunt în permanenta schimbare arhitecturile sunt de
obicei dezvoltate într-o maniera iterativa, ceea ce nu garanteaza o arhitectura solida.
O abordare iterativa nu este suficienta pentru rezolvarea problemelor specifice de
proiectare precum integrarea sistemelor de mostenire în dezvoltarea unei
arhitecturi (sabloanele de proiectare sunt foarte eficiente în sprijinirea deciziilor de
proiectare).
sabloane
sabloanele47[47] descriu probleme de proiectare recurente care apar într-un anumit
context si propun solutii la acestea. O solutie descrie componentele participante,
46[46] Jacobson, I., Booch, G., Rumbaugh, J., The Unified Software Development Process, Addison-Wesley, 1999
47[47] Gamma, E., Helm, R., Johnson, R., Design Patterns. Elements of Reusable Object-Oriented Software,
Addison-Wesley, 1997
responsabilitatile lor, relatia între aceste componente si interactiunea acestor
componente în contextul unei probleme specifice. De aici rezulta ca sabloanele ne
permit reutilizarea cunostintelor de proiectare, sprijinind dezvoltarea sistemelor
software de calitate superioara.
Buschmann48[48] identifica sabloane la trei nivele de abstractizare:
- sabloanele arhitecturale - mapeaza mecanismele de structurare fundamentale
pentru sistemele software. Ele descriu subsistemele arhitecturale, responsabilitatile
acestora, relatiile si interactiunea dintre ele. Un exemplu de astfel de sablon este
sablonul MVC (Model-View-Controller49[49]).
- sabloanele de proiectare -descriu structura, relatiile si interactiunea între
componente pentru a rezolva problemele de proiectare aparute într-un anumit
context si deriva dintr-un limbaj de programare specific.
- dialecte - descriu sabloanele care se refera la o implementare specifica dintr-un
limbaj de programare.
sabloanele sunt disponibile pentru diverse infrastructuri - de exemplu J2EE,
CORBA50[50] si PHP.
Totusi, sabloanele reprezinta doar un ghid pentru o anumita problema. Arhitectii
software trebuie sa adapteze sabloanele la problema si constrângerile respective, sa
integreze si sa îmbunatateasca sabloanele folosite. Pentru a sustine procesul de
integrare, Buschmann recomanda folosirea asa-numitelor limbaje-sablon. Un limbaj-
sablon descrie interconexiunile sabloanelor pe nivele de abstractizare diferite,
sugereaza diferite utilizari pentru sabloane si indica adaptarea necesara pentru a
oferi un sistem solid.
IBM descrie în sabloanele pentru afaceri electronice sabloanele de arhitectura
pentru aplicatiile comerciale si modul în care pot fi mapate pe infrastructura
IBM51[51]. Aceste sabloane de arhitectura sunt perfectionate printr-un lant de
decizii, pornind de la cazurile de utilizare si terminând cu arhitectura tinta.
48[48] Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., Stal, M., Pattern - Oriented Software
Architecture:
49[49] Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., Stal, M., Pattern - Oriented Software
Architecture:
50[50] Malveau, R. C., Mowbray, T. J., CORBA Design Patterns, John Wiley & Sons, 1997
51[51] IBM, Patterns for e-business, 2002, http://www-106.ibm.com/developerworks/patterns/, [last visit: 2005-
12-01]
Cadre de lucru
Cadrele de lucru de lucru reprezinta o alta optiune pentru reutilizarea cunostintelor
arhitecturale existente. Un cadru de lucru este un sistem software reutilizabil cu o
functionalitate generala deja implementata. Cadrul de lucru poate fi întâlnit sub
forma aplicatiilor gata de folosire52[52] si serveste ca o schita pentru arhitectura si
functionalitatile de baza ale unui domeniu specific al aplicatiei. (deci cunostintele
arhitecturale continute în cadrul de lucru pot fi preluate în întregime în aplicatie).
Beneficiile unui cadru de lucru - simpla reutilizare a arhitecturii si functionalitatii-
trebuie puse în balanta alaturi de dezavantajele sale (gradul înalt de instruire
necesara, lipsa standardelor pentru integrarea diferitelor cadre de lucru si
dependenta de producatori).
Clasificarea arhitecturilor
În ultimii ani au fost dezvoltate o serie de arhitecturi pentru rezolvarea cerintelor
specifice din diverse domenii de aplicatii. Anastopoulos si Romberg53[53] descriu
arhitecturile pentru mediul aplicatiilor web în functie de aspectul stratificat al
arhitecturilor sau de aspectul datelor (sustinerea diferitelor date si formate de date):
- aspectul stratificat: se refera la faptul ca sistemele software sunt structurate pe
câteva nivele pentru implementarea principiului "separarea intereselor" în cadrul
unui sistem software. Multe cadre de lucru din domeniul sistemelor distribuite si
aplicatiilor web sunt structurate în principal pe aspectul stratificat (de exemplu
arhitecturile J2EE54[54] utilizate pentru a integra sistemele de mostenire;
portalurile).
- aspectul datelor: datele pot fi structurate sau nestructurate. Datele structurate
urmeaza o schema predefinita asemanator tabelelor din bazele de date relationale
sau structurilor XML dintr-un document. Datele nestructurate sunt elemente
multimedia (imagini, audio, video) care nu respecta o schema explicita, ceea ce face
dificila procesarea lor automata.
52[52] Fayad, M. E., Schmidt, D. C., Johnson, R. E., Building Applications Frameworks: Object Oriented
Foundations
2005-10-15]
54[54] Sun Microsystems (2003), Java2 Platform, Enterprise Edition Specification, v 1.4, November, 2003,
OOHDM-Java2
Abordarea OOHDM-Java2 descrie modul în care modelul de navigare OOHDM este
mapat pe platforma J2EE. Implementarea acestuia se bazeaza pe sablonul MVC.
Figura 4.7 ilustreaza modul în care componentele OOHDM-Java2 sunt mapate în
sabloane MVC. Spre deosebire de JSP-Model-2 si Struts, aceasta abordare prezinta o
componenta de navigare într-un mod explicit.
Figu
ra
4.7
Com
pon
ente
le
OO
HD
M-
Java
2
În aceasta figura secventa de executie este indicata de marginile numerotate: (1) o
cerere HTTP este trimisa catre parserul de cerere HTTP, care trimite mai departe un
mesaj Dispatcher-ului.(2) Similar cu Struts, acest parser ruleaza obiectele aplicatiei
alocate (3). Ulterior, obiectul aplicatiei selectate sau o alta informatie (exemplu
agentul utilizator) este utilizat pentru a identifica interfata utilizatorului (4). În
continuare, la interfata utilizator se adauga elementele de navigare (5). În final
rezultatul este plasat într-un layout adecvat si transmis clientului.
Proxy-uri
Initial proxy-urile erau folosite pentru a salva latimea de banda, din acest motiv fiind
numite si proxy-uri de caching55[55]. Proxy-urile sunt capabile sa îndeplineasca si
alte functii:
- proxy-uri de legaturi: sunt de cel putin doua tipuri. În primul rând, sistemele de
tipul URL-urilor persistente (PURLs- Persistent URLs56[56]) utilizeaza componente de
tip proxy. Mai exact, un proxy este utilizat ca un server intermediar pentru a trimite
cererile de URL-uri ale clientului catre serverul real. Daca numele sau locatia resursei
solicitate se schimba, este necesara doar schimbarea adresei URL interne (clientul nu
trebuie sa stie acest lucru). O astfel de schimbare necesita un tabel de mapare între
URL-ul solicitat si cel "real", acesta fiind gestionat de catre proxy. În al doilea rând,
proxy-urile sunt utilizate pentru a adapta si formata legaturile si continutul pentru
utilizatori. O metoda implicata în acest concept este inserarea dinamica a legaturilor
care se potrivesc intereselor unui utilizator, prin aceasta paginile HTML fiind
analizate de proxy si modificate pentru a se potrivi profilului utilizatorului.
Utilizatorul va fi informat în privinta schimbarii resursei transmise la sfârsitul
documentului.
- proxy-uri de istoric: multe aplicatii web încearca sa-si adapteze functionalitatile
cerintelor utilizatorilor. Problema care apare este ca HTTP-ul este un protocol
simplu, care nu ofera informatii despre istoricul navigarii unui utilizator pe mai multe
situri. De exemplu, daca un utilizator planifica o vacanta si rezerva un zbor, un hotel
si închiriaza o masina pe internet, atunci vânzatorul de bilet de avion nu stie ca
utilizatorul a rezervat o camera la un hotel si a închiriat o masina. Daca compania de
zbor ar cunoaste aceste informatii, atunci camera de hotel rezervata si masina
închiriata ar putea fi anulate daca utilizatorul contramandeaza zborul. O problema
similara apare si în domeniul marketingului direct, în care, cu cât se cunosc mai
multe detalii despre interesele utilizatorului, cu atât va fi mai mare efortul pentru
55[55] Bongio, A., Brambilla, M., Ceri, S., Comai, S., Fraternali, P., Matera, M., Designing Data-Intensive Web
56[56] Weibel, S., Jul, E., Shafer, K., PURLs: Persistent Uniform Resource Locators, Online Computer Library
Figura 4.13
Arhitectura media
de streaming care
utilizeaza o
infrastructura
broadcasting
4.6 Concluzii
The development
of Web
applications is
driven by the
technical
development of
(new) client
devices and emerging server infrastructures. The trend towards ubiquitous and
portal-oriented
applications will undoubtedly continue in view of the emergence of continually more
powerful
client hardware. Portal-oriented Web applications will be supported by
developments toward
service architectures and Web services.
This trend has also led to the emergence of a number of new infrastructure
approaches, e.g.,
peer-to-peer infrastructures, which will have a major influence on the development
of ubiquitous
Web applications. On the other hand, the bandwidth of server infrastructures used
for Web
applications has also been growing continually.
V Proiectarea aplicatiilor web pe baza tehnologiei
Web-ul a aparut ca un sistem hipertext extrem de simplu care sustine conceptul de
legaturi globale. XML a fost prima tehnologie care a facut posibila dezvoltarea
sistemelor hipertext, desi nu este folosita la scara larga. Ulterior, web-ul s-a focalizat
pe conexiuni la baze de date, aceasta implicând proiectarea informatiei, fiind
utilizata partial în proiectarea aplicatiilor web. Integrarea modulelor software
extinse pe partea clientului si serverelor (care au implicat tehnici de proiectare
software orientate obiect) are o importanta deosebita pentru web.
Dezvoltatorii aplicatiilor web ar trebui sa descompuna aplicatiile web pe trei straturi
logice care la rândul lor se împart în doua jumatati pe baza aceluiasi principiu. Este
necesara realizarea unei distinctii între componente (nodurile aplicatiei web: media,
componente software si conexiunile la baza de date) si aranjarea lor într-o retea. Se
identifica urmatoarele trei straturi:
(1) proiectarea prezentarii - în care proiectam aspectul, un rol important având
interfetele utilizator multi-formale
(2) proiectarea interactiunilor - în care se proiecteaza navigarea prin utilizarea
retelelor si casetele de dialog specifice prin utilizarea componentelor
(3) proiectarea functionala - reprezinta inima aplicatiei web. (vezi figura 5.1)
Pe masura ce proiectarea devine mai concreta pe fiecare nivel si pentru ambele parti
(noduri, retea) ne vom concentra asupra utilitarelor pentru proiectarea hipertext-
ului, informatiei si software-ului.
P P P P
r r r r
e e e o
z z z i
e e e e
n n n c
t t t t
a a a a
r r r n
e e e t
a a i
s c m
i o e
t n d
u t i
a i a
t n I
i u n
e t g
i u i
l n
d u e
e i r
Interactiune
Functie
Interactiunea cu utilizatorul
Pe masura ce aplicatiile web au devenit mai sofisticate, au fost asociate
multiple roluri HTML-ului: transportul informatiei, layout-ul, interactiunea cu
utilizatorul, procesele si accesul direct al continutul digital. Odata cu cresterea
responsabilitatilor, HTML-ul a evoluat, încorporând mai multe functionalitati pentru
a se adapta unor scenarii din ce în ce mai complexe. În acest proces interactiunea cu
utilizatorul a devenit o limitare majora: serverele trebuie sa genereze o noua pagina
de fiecare data, aplicatiile ruleaza din ce în ce mai greu, iar din momentul în care
formularele au devenit insuficiente pentru a acoperi tehnicile mai avansate de
interactiune cu utilizatorul, HTML-ul ca interfata a cunoscut un declin comparativ cu
aplicatiile desktop. Pentru a elimina aceste limitari au fost dezvoltate diferite
abordari tehnologice.
În ceea ce priveste interactiunea cu utilizatorul se remarca doua tendinte opuse:
câte functii necesita interfata pentru a afisa datele si a realiza operatiile si, în al
doilea rând, cât de mult este concentrata pe date aplicatia în ansamblu (vezi figura
5.2).
Fig
ura
5.2
Co
mp
arar
ea
prin
cipa
lelo
r
teh
nol
ogii
de dezvoltare a interfetelor
Organizarea interfetei utilizator
Interfata utilizator a unei aplicatii web trebuie sa reprezinte o cantitate mare
de informatie, operatii asupra acestei informatii si relatii dintre acestea. În acest sens
este necesara o mapare corespunzatoare a acestor aspecte. Pentru a rezolva aceasta
problema un prim pas este gruparea elementelor în canale de interactiune. Aceasta
grupare trebuie sa fie clara si consistenta în întreaga interfata. Majoritatea intrarilor
si grupul de interactiune trebuie sa ramâna aceleasi pe parcursul sesiunii, în timp ce
grupul de iesire se modifica.
O problema frecventa apare atunci când un nod contine mai multe informatii decât
permite dimensiunea ecranului. Când punem în balans aspectele de proiectare a
prezentarii cu aspectele de proiectare a interactiunii trebuie avute în vedere
urmatoarele întrebari: Dimensiunea ecranului are prioritate fata de conceptul
potrivit caruia nodurile sunt unitati atomice (si unitati de navigare)? Un nod ar putea
fi împartit în noduri mai mici? Navigarea suplimentara poate fi o alternativa la
scrolling? Cum pot fi echilibrate comportamentul complex al interfetei utilizator si
portabilitatea? Amestecul tehnologic are implicarile lui, de aceasta data în ceea ce
priveste semantica de navigare, portabilitatea si caracterul utilizabil. Se pot
diferentia mai multe abordari (vezi tabelul 5.2):
1. Întregul nod este trimis utilizatorului ca HTML. Pagina HTML include fie scripturi
fie tehnologii plug-in pentru a permite utilizatorului accesul la un subset al
informatiei.
2. Întregul nod este trimis utilizatorului ca o singura pagina HTML fara scripturi.
Utilizatorul selecteaza legaturile relative de pe pagina pentru a naviga în acea
pagina.
3. O vizualizare partiala spere nod este trimisa utilizatorului. Pagina afiseaza un
subset de informatii aranjate în functie de semnificatie. Utilizatorul poate naviga
catre alte pagini pentru a citi în întregime informatia dorita.
Abordarile Semantici de Portabilitate Usurinta în
implementarii navigare folosire
HTML+scripting + - +
HTML+legaturi + + -
relative
Pagini HTML - + -
legate
Tabelul 5.2 Alternativele de implementare pentru noduri. Tabelul afiseaza modul în
care abordari diferite ale implementarii au un impact pozitiv sau negativ asupra
semanticii navigarii, portabilitatii si caracterului utilizabil.
Paginile legate elimina utilizarea excesiva a scrolling-ului dar conduc catre cai de
navigare suplimentare si deci la o latenta mai mare la afisarea în mod repetat a unei
informatii. Studiile efectuate asupra utilizatorilor recomanda folosirea scrolling-ului
în locul unei navigari suplimentare (Nielsen 1997a).
Proiectarea navigarii
Rezultatul obtinut din proiectarea navigarii este dublu: pe de o parte elementele pe
care utilizatorii le pot accesa si pe de alta parte structura de navigare. Elementele
devin noduri în cel mai simplu caz, iar structura defineste relatiile dintre noduri.
Aceste relatii vor deveni ulterior legaturi vizibile în interfata utilizator. În acest
scenariu proiectarea interactiunii defineste aspectele necesare pentru navigarea în
sine (ancora si URL) si elementele necesare pentru orientarea utilizatorilor.
Proiectarea reprezentarii unei legaturi: ancora
Ancorele sunt corespondente vizibile ale URL-urilor si trebuie sa sugereze
utilizatorilor activarea acestora si consecintele posibile. Deoarece implementarea
bazata pe HTML a web-ului amesteca conceptul de ancora cu conceptul de legatura
într-un singur element unidirectional (<a>), semanticile se îmbina la rândul lor, de
aceea utilizatorii nu pot fi siguri de consecintele posibile care apar când acceseaza o
legatura. (vezi tabelul 5.3)
Semantica Incertitudinea privind sensul acesteia
legaturii
Navigare Legatura reprezinta o singura destinatie sau mai multe
destinatii? Destinatia este în interiorul sitului web sau în
afara lui? Noul nod este reprezentat în aceeasi fereastra
sau într-una noua? Textul din pagina actuala se modifica
sau are loc o navigare adevarata?
Descarcare Ce tip de document este descarcat? Sunt necesare utilitare
(exemplu plug-in-uri) pentru reprezenta documentul?
Proces Legatura va declansa o actiune pe server? VA fi posibila
navigarea înapoi sau revenirea la actiunea anterioara?
Tabelul 5.3 Consecintele posibile ale accesarii unei legaturi
Textul unei ancore trebuie sa fie autoexplicativ (W3C 2001c); iar legaturile trebuie
clasificate pe categorii. În plus, iconitele pot fi utilizate în interiorul ancorelor pentru
a vizualiza legaturile. Desi ancorele si iconitele pot fi specificate static, proprietatile
care se modifica dinamic (exemplu daca anumite tipuri media pot fi deschise)
trebuie marcate prin utilizarea scripturilor incluse în aceste pagini.
Proiectarea interna a legaturilor: URL
Navigare si orientare
5.4 Proiectarea functionala
În cadrul proiectarii functionale trebuie luate de asemenea în considerare aspectele
tehnologice care au un impact major asupra aplicatiei web în curs de dezvoltare.
Integrare
Paradigme de comunicare si middleware
Aplicatii web distribuite între corporatii
VI. Tehnologii pentru aplicatiile web
Alegerea unei tehnologii adecvate este un factor de succes important în
dezvoltarea aplicatiilor web. Pentru a putea utiliza tehnologiile, a observa modul de
interactiune dintre ele într-o arhitectura existenta si implementa aplicatii web este
necesara o cunoastere a caracteristicilor acestora. În continuare vom aborda
principalele tehnologii, interactiunea si modul de utilizare al acestora în anumite
arhitecturi, tinând cont de recomandarile W3C (World Wide Web Consortium).
Hipertext si hipermedia
Pe baza utilizarii marcarii pentru marcarea elementelor singulare, hipertextul
este vazut ca o organizare a interconexiunilor unitatilor de informatii singulare.
Relatia dintre aceste unitati poate fi exprimata prin legaturi. Conceptul hipertext
este fundamental pentru World Wide Web. În timp ce hipertextul desemneaza doar
legaturile unitatilor de informatie în versiunea lor text, hipermedia este vazuta ca o
modalitate de extindere a principiului hipertext catre obiectele multimedia arbitrare
(ex: imagini sau video).
6.2 Comunicarea client/server pe web
Urmarirea sesiunii
Aplicatiile web interactive trebuie sa fie capabile sa distinga cererile de la
numerosi utilizatori simultani si sa identifice cererile care vin de la acelasi utilizator.
Termenul sesiune este utilizat pentru a defini o astfel de secventa a cererilor
HTTP dintre un anumit utilizator si un server într-o anumita perioada de timp.
Deoarece HTTP este un protocol simplu, serverul web nu poate aloca automat
cererile venite pentru o sesiune. Distingem doua metode principale care permit
serverului web sa aloce automat o cerere venita pentru o sesiune:
- în fiecare din aceste cereri catre server, clientul însusi se identifica într-un
mod unic. Aceasta înseamna ca toate datele trimise catre server sunt alocate ulterior
sesiunii respective;
- toate datele schimbate între un client si un server sunt incluse în fiecare
cerere pe care un client o trimite unui server.
În majoritatea cazurilor, este de dorit sa lasam datele logicii aplicatiei pe
server, astfel încât logica aplicatiei sa nu fie atât de simpla. De obicei, este
implementat un mecanism de urmarire a sesiunilor prin rescrierea URL-ului sau
cookies.
Rescrierea URL-ului
Rescrierea URL-ului este un mecanism care transmite datele relevante ale
sesiunii ca un parametru în URL. Datele transmise pot apoi fi utilizate pentru a
reconstrui sesiunea de pe server. Din nefericire, acest mecanism are anumite lipsuri:
- daca un volum mare de date este necesar într-o sesiune, atunci URL-ul
poate deveni cu usurinta dezordonat si purtator de erori. Din momentul în care
aplicatiile web tind sa devina complexe, cerintele pentru volumul de date care
trebuie stocat într-o sesiune poate de asemenea creste;
- limitarea lungimii unui URL poate determina ca acest mecanism sa devina
instabil pe anumite sisteme;
- obstacolul principal este ca URL-urile codificate în paginile HTML trebuie sa
fie adaptate dinamic pentru fiecare sesiune; de exemplu pentru a codifica o sesiune
într-un ID de sesiune dintr-un URL. Aceasta înseamna ca paginile sau legaturile din
aplicatie trebuie sa fie generate dinamic pentru fiecare cerere. Putem folosi cookies
pentru a rezolva elegant aceasta problema.
Cookies
Cookies sunt fisiere text mici folosite pentru a stoca informatia de pe server
(ex: ID-ul unei sesiuni) pe sistemul clientului. Aceasta informatie este scrisa într-un
fisier text sub forma perechilor nume-valoare. Cookies sunt generate de catre
serverul web si transmise clientului în antetul raspunsului HTTP. Browser-ul web al
clientului stocheaza un cookie pe sistemul clientului si va utiliza întotdeauna acel
cookie pentru a transmite serverului ce a generat cookie la fiecare cerere. Cookies
sunt clasificate în: "sesiune" sau "permanente". În timp ce cookie-urile permanente
ramân stocate pe calculatorul clientului (stocate pe hard disk), cookie-urile sesiune
sunt doar pastrate pâna când situl este parasit sau browser-ul este închis. Aceasta
înseamna ca serverul poate identifica cererile de la anumit client si sa le aloce unei
sesiuni. Cookies pot include si data expirarii; odata ce data expira, browser-ul client
nu va trimite cookie-ul catre server.
Principalul beneficiu al cookies-urilor este ca informatia care identifica o
sesiune poate fi schimbata în mod transparent între un client si un server. Ele pot fi
utilizate pentru a implementa cu usurinta urmarirea sesiunilor si nu necesita un efort
sporit deoarece doar ID-ul sesiunii generate de server trebuie transmis.
Principalul dezavantaj al cookies-urilor este ca anumiti utilizatori dezactiveaza
functionalitatea cookie în browsere pentru a preveni schimbarea comportamentului
browserului.
Scenarii de utilizare
Care din cele doua mecanisme discutate anterior este cel mai potrivit pentru
aplicatiile web depinde în principal de circumstante. În mod ideal, este de dorit sa
lasam informatiile despre sesiune pe partea de server si sa utilizam un ID de sesiune
cât mai sigur. Aceasta metoda poate fi combinata: utilizând cookies pentru a stoca
ID-ul sesiunii si rescrierea URL-ului pentru browserele care nu accepta cookies. Un
exemplu de codificare pentru ID-ul unei sesiuni într-un URL este:
http://host/application/page.ext?SessionId=XYZ sau
http://host/application/XYZ/page.ext, unde XYZ reprezinta o cheie unica pentru
sesiune, greu de ghicit.
Tehnologiile server actuale (PHP, JSP, ASP.NET) ofera API-uri pentru utilizarea
mecanismului descris anterior. Acest API ascunde complexitatea sesiunii, facilitând
generarea ID-urilor de sesiune si oferind metode dedicate pentru stocarea
informatiilor despre sesiune.
6.3 Tehnologii client-side
Ajutoare si plug-inuri
Programele de ajutor sunt aplicatii care adauga functionalitati browserelor
web. În momentul în care browserul receptioneaza un tip de media inclus în lista de
ajutoare sau plug-inuri, tipul respectiv este trimis unui program extern specificat în
lista pentru o procesare ulterioara. Exemple de aplicatii de ajutor sunt WinZip si
Acrobat Reader. Un program de ajutor trebuie instalat de catre utilizator pe
calculatorul clientului. Programul de ajutor este apoi invocat la tipul corespunzator
de MIME. Orice program poate deveni un ajutor. Dezavantajul ajutoarelor consta în
comunicarea avansata cu browserele. Plug-inurile pot rezolva aceasta problema. Un
plug-in este un program de ajutor instalat permanent în browser pentru optimizarea
comunicarii.
Applet-uri Java
Applet-urile Java sunt programe scrise în Java care sunt încarcate dinamic în
browser. Ele ruleaza într-un "sandbox", astfel împiedicând accesul direct al
resurselor sistem de pe client; uneori permit accesarea resurselor dupa verificarea
politicii de securitate. Applet-urile sunt încarcate de un server web si executate într-
un browser într-un mediu de lucru numit JVM (Java Virtual Machine). Applet-urile nu
sunt stocate în mod persistent pe un sistem. Spre deosebire de controalele ActiveX,
applet-urile sunt compilate într-un sistem independent, ceea ce le permite sa ruleze
pe toate platformele care dispun de JVM.
Controale ActiveX
Prin controalele ActiveX Microsoft a permis utilizarea componentei COM în
browserele web. Controalele ActiveX sunt componente standard COM proiectate
pentru a oferi un anumit set de interfete (interfete COM). Un browser web poate
încarca o astfel de componenta de pe un server web, instantia via COM si apoi utiliza
funtionalitatea acelei componente. Spre deosebire de applet-urile Java, controalele
ActiveX sunt compilate în cod binar, care ofera o performanta deosebita. Controalele
ActiveX sunt stocate într-un director de cache special al browser-ului, prin apelarile
ulterioare functionalitatea respectiva fiind deja disponibila. În plus, controalele
ActiveX au aceleasi posibilitati ca plug-in sau ajutor; ele pot accesa toate zonele
sistem si functiile pe care utilizatorul le detine pe sistemul respectiv (acesta este un
risc de securitate). Microsoft a dezvoltat o metoda care permit distribuitorilor de
controale ActiveX sa utilizeze o metoda criptografica pentru a semna aceste
componente. Când controalele ActiveX sunt încarcate în browser, certificatul
distribuitorului va fi afisat; utilizatorul va decide daca este de acord sa ruleze un
program în functie de încrederea pe care o prezinta compania producatoare. Un alt
beneficiu al controalelor ActiveX este ca componentele pot fi dezvoltate într-un
limbaj arbitrar: Java, Visual Basic si C++, atât timp cât necesitatile compilatorului
pentru limbajul respectiv îndeplineste cerintele specificatiilor COM.
6.4 Tehnologii specifice documentului
HTML - Hypertext Markup Language
HTML este o aplicatiei SGML care descrie elementele care pot fi utilizate
pentru a marca continutul într-un document hipertext si modul în care aceste
elemente sunt în legatura într-un DTD (Document Type Definition). Elementele de
marcare sunt închise între simbolurile "<" si ">". HTML defineste un set mare de
etichete pentru a indica semantici diferite. De exemplu, eticheta <H1> poate fi
folosita pentru a marca titlurile de nivel 1.
Etichetele sunt folosite pentru structurarea logica a documentului. De
exemplu, elementul de marcare <strong> specifica faptul ca partea din document
dintre aceste perechi de etichete trebuie interpretate sub forma unei evidentieri
logice, pe care browserele le afiseaza în mod normal cu aldine. Datorita
posibilitatilor limitate ale proiectarii grafice, au fost introduse elementele
suplimentare pentru a permite proiectantilor sa influenteze în mod direct layout-ul
documentului. De exemplu, elementul de marcare <b> poate fi folosit pentru a
instrui browserul sa reprezinte o parte din document cu aldine. Oricum, semantica
marcarii este pierduta. Datorita multitudinii de posibilitati de a influenta layout-ul,
nu este surprinzator ca majoritatea resurselor HTML neglijeaza utilizarea
elementelor de marcare logice/semantice. Aceasta face mult mai dificila
interpretarea informatiilor pentru masini. Situatia este mult mai critica deoarece
informatia poate fi, într-un anumit mod, usor convertita în alte formate (de exemplu
pentru a o face utilizabila pe dispozitive cum sunt telefoanele mobile). Simplitatea în
crearea si procesarea resurselor HTML (ele sunt simple fisiere text) este o
proprietate foarte importanta pentru caracterul omniprezent al informatiei pe Web,
aceasta fiind împiedicata de aspectul prezentarii. Introducerea noilor elemente de
marcare a fost facilitata îndeosebi de faptul ca browserele resping sau ignora
elementele de marcare pe care nu le cunosc. Aceasta flexibilitate a fost utilizata în
mod repetat de producatorii de browsere pentru a extinde optiunile de layout, care
au condus la noi standarde, dar si la reprezentari "incompatibile".
Aceste probleme au încurajat introducerea unui numar mare de extensii. De
exemplu, CSS (Cascading Style Sheets) reprezinta un mecanism simplu pentru
adaugarea informatiilor de stil (cum sunt fonturile si culorile) la documentele Web.
Împreuna cu introducerea XHTML-ului, un dialect XML, a devenit posibila utilizarea
beneficiilor XML-ului ca un limbaj "curat" pentru descrierea documentelor HTML.
57[57] World Wide Web Consortium (W3C), Namespaces in XML, January, 1999a,
http://www.w3.org/TR/1999/REC-xml-names-19990114/Overview.html, [ultima vizita:
2007-12-05]
Exista doua moduri diferite de marca un element XML prin namespace-uri:
prin specificarea namespace-ului pentru un element sau prin utilizarea unui prefix.
Metoda utilizarii unui prefix este utila atunci când diferite elemente apartin aceluiasi
namespace, deoarece face documentele XML mai scurte si mai usor de citit. Figura
6.2 utilizeaza exemplul anterior pentru a ilustra cele doua variante. URI-ul (uri:order)
adreseaza un namespace ce corespunde unei comenzi.
<item>
<o:item>
<book xmlns="uri:order" isbn="123-456" /> <o:book / >
</item> </o:item>
</order> </o:order>
Figura 6.2 Utilizarea unui namespace fara si cu un prefix
XML DOM
DOM (Document Object Model) foloseste o abordare orientata-obiect asupra
documentelor XML, permitând o procesare usoara si intuitiva a XML-ului. DOM este
creat de un parser XML care parseaza (analizeaza) structura unui document XML si
instantiaza un arbore obiect (vezi Figura 6.3). Fiecare element XML din acest arbore
corespunde unui nod. Beneficiul acestei metode este accesarea nodurilor într-o
maniera orientata-obiect, odata ce DOM a fost creat. Dezavantajul acestei metode
consta în faptul ca este costisitoare, deoarece este nevoie de un parser XML pentru a
crea arborele. De exemplu, deseori vom dori sa citim parti ale unui document XML în
loc de întregul document; în aceste cazuri, este recomandat sa utilizam parsere care
sunt mai putin consumatoare de resurse (ex: parsere SAX - Simple API for XML).
Parserele SAX utilizeza un model bazat pe evenimente, care suporta interventia
tintei în procesul de parsare. Parserele SAX sunt disponibile pentru majoritatea
platformelor si limbajelor de programare.
<order>
<OrderDate ts="2003-
06-30" />
<price>30.00EUR</pri
ce>
</order>
Figura 6.3 Structura DOM pentru un fragment al exemplului în XML de comanda
Constrângeri privind validitatea XML-ului
În timp ce constrângerea privind buna structurare, definita în specificatiile
XML, asigura o sintaxa clara pentru documentele XML, validitatea ne permite
introducerea unei structuri în mod specific pentru un document XML. Un document
XML este valid atunci când este corect construit si când continutul si structura
acestuia sunt conforme cu regulile predefinite. Aceste reguli sunt formulate fie în
DTD-uri (Document Type Definitions) sau în schemele XML. În termenii orientarii
obiect, aceasta semnifica faptul ca o buna structurare ne permite maparea XML-ului
la DOM, în timp ce validitatea ne permite introducerea tipurilor de date specifice
aplicatiei.
DTD (Document Type Definition)
Un DTD reprezinta un set de reguli care pot fi utilizate pentru a descrie
structura unui document XML. XML a împrumutat DTD-urile din SGML. Figura 6.4
reprezinta un DTD care valideaza exemplul XML al comenzii. Fragmentele !DOCTYPE,
!ELEMENT si !ATTLIST descriu tipul de data. Modul în care elementele sunt legate ne
aminteste de modul de definire a expresiilor regulate. Regula <!ELEMENT order
(item+,OrderDate,price)> specifica ca un element comanda (order) consta în cel
putin un articol ("+"), urmat de o data a comenzii (OrderDate) si un pret (price).
<?xml version="1.0"?>
<!DOCTYPE order [
<!ELEMENT order (item+,OrderDate,price)>
<!ATTLIST order OrderID ID #REQUIRED>
<!ELEMENT item (book,cdrom)+>
<!ELEMENT book EMPTY>
<!ATTLIST book isbn CDATA #REQUIRED>
<!ELEMENT cdrom EMPTY>
<!ATTLIST cdrom title CDATA #REQUIRED>
<!ELEMENT OrderDate EMPTY>
<!ATTLIST OrderDate ts CDATA '2003-06-30T00:00:00'>
<!ELEMENT price (#PCDATA)>
]>
Figura 6.4 DTD-ul pentru exemplul XML al comenzii
Datorita structurii lor simple, DTD-urile sunt relativ usor de înteles de oameni.
Acesta este motivul pentru care ele sunt utile în principal când au fost create sau
întretinute manual. Datorita structurii simple, DTD-urile determina doua probleme
distincte, care sunt solutionate prin schemele XML:
- faptul ca DTD-urile au împrumutat din SGML este deseori considerata o
problema, deoarece solicita un parser DTD care sa citeasca gramatica. Exemplul
nostru demonstreaza ca un DTD nu reprezinta un XML corect construit;
- desi unele tipuri de date pot fi utilizate pentru a defini elementele sau
atributele din cadrul DTD-urilor, întinderea acestora este foarte limitata. Aceasta
restrictie împiedica reutilizarea DTD-urilor.
Schemele XML
Schemele XML (W3C, 2000) sunt proiectate pentru a raspunde problemelor
introduse prin DTD-uri. Principalele lor beneficii (integrarea tipurilor de date,
reutilizarea si formularea XML) vin cu pretul cresterii complexitatii. Rezultatul este
ca, atunci când dezvoltam schemele, a devenit aproape inevitabila utilizarea
instrumentelor. Datorita complexitatii acestora, în continuare vom discuta schema în
mod concis pentru a sublinia proprietatile si conceptele lor mai importante.
O schema XML poate fi utilizata pentru a descrie tipuri de date pre-definite,
cum ar fi string, byte, decimal sau date. În plus, acestea ne permit definirea fatetelor
care suporta tipuri de date definite de utilizatori similar template-urilor. Sa
presupunem ca toate atributele ISBN valide ale unui element XML numit book, din
exemplul cu comanda, trebuie sa urmeze notatia pentru numerele ISBN. Putem
utiliza o fateta pentru a descrie combinatia de numere si linii (-) din sablonul N\ -
NNNN\ -NNNN\ -N si reutiliza aceste tipuri de date în proiectele de dezvoltare
viitoare.
Exista doua concepte distincte care pot fi folosite pentru a obtine tipurile de
scheme de date pentru tipurile existente: extensia si restrictia. În sensul mostenirii
orientate-obiect, restrictia va corespunde specilizarii unei serii de valori ale unui
supertip, în timp ce extensia va fi similara agregarii altor tipuri. Figura 6.5 (partea din
stânga) demonstreaza cum este creat tipul LTH (mai mic decât 100) prin
restrictionarea tipului pre-definit positiveInteger si setarea limitei superioare pentru
seria de valori. În partea dreapta a figurii, tipul definit de utilizator orderType este
extins la datedOrderType, care adauga un element, orderDate, al tipului pre-definit
date la un orderType.
Figura 6.5 Tipuri definite de utilizator
XSL - eXtensible Stylesheet Language
XSL (W3C, 1999a) consta în trei parti:
- transformarile XSL;
- XPath si
- XSL-FO.
XSL include un standard pentru transformarea si formatarea XML-ului. XSLT
este un limbaj folosit pentru a defini sabloanele si regulile pentru transformarile
acestora si reprezinta inima XSL-ului. În timp ce XSL-FO este folosit pentru a defini în
mod clar un stil de formatare, acesta reprezinta doar una dintre toate posibilele
rezultate pentru transformare XSLT. Din acest motiv, XSL poate fi comparat cu
modelul-View-Controller de proiectare a sabloanelor. Modelul corespunde
documentelor XML, iar controler-ul corespunde XSLT-ului. View-urile create pot fi de
un natura arbitrara (HTML, WML, cHTML, sau din nou XML. Un view predefinit din
cadrul suitei XSL pot fi conceput ca un XSL-FO (Formatting Object).
XSLT - eXtensible Stylesheet Language Transformations
Standardul XSLT descrie cum continutul (datele) marcat în XML poate fi
transformat. Documente care definesc un program XSLT sunt numite foi de stiluri.
Limbajul XSLT definit este un dialect XML. Aceasta înseamna ca XSLT mosteneste
toate proprietatile XML, inclusiv costruirea corecta si validitatea. XSLT este descris în
namespace-ul (http://www.w3.org/1999/XSL/Transform) definit de W3C, care
garanteaza validitatea unei foi de stil XSLT. Rezultatul unei transformari XSL nu este
legat de structuri specifice sau dictate sau de restrictii. Aceasta înseamna ca
rezultatul unei transformari XSL acopera întregul spectru începând cu marcarea
structurata (XML) pâna la interpretarea arbitrara a sirurilor de caractere. Un
procesor XSLT lucreaza dupa principiul IPO (Input, Processing, Output). XML sunt
date de intrare, în timp ce foaia de stil XSLT realizeaza prelucrarea necesara pentru a
genera iesirea. Figura 6.6 demonstreaza modul în care functioneaza un procesor
XSLT.
Figura
6.6
Abord
are
schem
atica a
modului în care functioneaza un procesor XSLT
Functionalitatea unei transformari XSLT se bazeaza pe principiul "potrivirii
sablonului". O foaie de stil reprezinta un set de perechi de sablon-rezultat, similar
regulilor de mapare a unui sistem de rescriere a sirurilor (semi-Thue) (sablon →
rezultat). Un procesor cauta intrarile (sursa documentelor) sabloanelor, care sunt
definite în foaia de stil (sablon), si le înlocuieste cu rezultatul care se potriveste cu
sablonul din datele de iesire (documentele rezultat). Rezultatul poate fi vazut ca un
sablon care reprezinta un amestec de iesiri si alte elemente ale limbajului XSL.
Comparativ cu limbajele de programare conventionale, precum C sau C #,
putem aborda sabloanele ca proceduri, si template-urile drept corpul acestora.
Înlocuirea sablonului rezultat initeaza un proces recursiv asupra DOM-ului din
intrarea XML. Similar cu procedurile, sabloanele pot fi parametrizate si suporta
contextele dintr-o intrare XML. XML Path Language (XPath) este folosit pentru a gasi
sabloane. În timp ce XSLT reprezinta o colectie de modele, XPath controleaza modul
în care sunt conectate la documentul de intrare XML. Elementele limbajului XSLT pot
fi grupate în patru categorii distincte:
- elementele de definire (D): aceste elemente ale limbajului sunt utilizate
pentru a defini o foaie de stil XSL (xsl: stylesheet), un model (xsl: template), variabile,
parametri, etc
- elementele fluxului de control (C): aceste elemente de limbaj sunt utilizate pentru a
manipula control fluxului dintr-un sablon XSLT. De exemplu, putem formula iteratii
(xsl: foreach) sau intructiuni conditionale (xsl: if).
- elementele limbajului orientat pe iesiri (O): aceste elemente sunt folosite pentru a
genera datele de iesire ale unui sablon XSLT. De exemplu, am putea genera
elemente de marcare (xsl: element si xsl: atribut) sau doar text liber.
- elemente privitoare la locatie (L): Aceste elemente sunt utilizate pentru aspecte
privitoare la limbi multiple, cum ar fi definitiile locale si formatele (xsl: zecimal-
format).
Figura 6.7 defineste un stil XSLT, care poate transforma "ordinul de
cumparare" din exemplul XML prezentat în figura 6.1. Browserele cu procesoare XSL
integrate, cum sunt versiunile curente de Internet Explorer si Netscape Navigator,
pot reprezenta un "ordin de cumparare" cu foaia de stil specificata în HTML.
Observam ca avem nevoie sa adaugam un procesor de instructiuni pentru exemplul
XML, pentru a specifica locatia foii de stil (vezi figura 6.8).
<?xml version='1.0'?>
<xsl:stylesheet
xmlns:xsl=http://www.w3.org/1999/XSL/Transform
version="1.0">
<xsl:template match="/">
<HTML><HEAD><TITLE>Ordin de cumparare</TITLE></HEAD>
<BODY>
<xsl:apply-templates select="order"/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="order">
<table border="1">
<th colspan="2">
Ordin de cumparare (<xsl:value-of select="@OrderID"/>)
</th>
<xsl:for-each select="item">
<xsl:apply-templates select="book" />
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="book">
<tr><td>Book</td>
<td><xsl:value-of select="@isbn"/></td></tr>
</xsl:template>
</xsl:stylesheet>
Figura 6.7 Utilizarea unui stil XSLT pentru exemplul "ordin de cumparare" example.
<?xml-stylesheet type="text/xsl"
href="http://www.order.com/xsl/order.xslt"?>
Figure 6.8 Integrarea unui stil XSLT într-un document XML
XPath
XML Path Language (XPath) ofera functionalitatea de a parcurge un document
XML. XPath ofera o multitudine de expresii care permit definirea unor cai de cautare
ce pot fi folosite într-un document XML pentru a returna setul de noduri XML.
Expresiile XPath sunt evaluate de un procesor XPath, care functioneaza în acelasi
mod cu directoarele dintr-un sistem de fisiere. De exemplu, copiii elementelor XML
pot fi priviti ca intrari într-un director din sistemul de fisiere. Figura 6.9 arata
legatura dintre un document XML si interpretarea acestuia ca un sistem de
directoare pentru a întelege mai bine conceptul. Pe partea stânga, figura arata cum
este utilizata o expresie XPath, în timp ce partea dreapta arata modul în care o
expresie locala este utilizata. Nodurile dintre acolade reprezinta rezultatele acestor
expresii.
Figura 6-9 Interpretarea unui document XML ca o structura a unui sistem de
directoare
Similar cu caile dintr-un sistem de fisiere, putem defini expresii XPath, descriind
calea dintr-un document XML. Similar cu sistemul de fisiere, distingem o adresare
relativa si una absoluta. XPath ofera o varietate larga de modele de cautare în XML.
De exemplu, am putea folosi pe lânga elementele XML atribute. Mai mult decât atât,
XPath ne permite accesul "axe", cum sunt, descendentii si stramosii. Aceasta
înseamna ca putem sa formulam în mod arbitrar expresii complexe, care pot fi apoi
folosite pentru a parcurge documentele XML pe baza DOM-ului.
Agentii URI sunt aplicatii speciale utilizate pentru a procesa cererile HTPP si
transmite o resursa solicitata. Practic, un URI este utilizat pentru a identifica instanta
care proceseaza cererea. Aceasta instanta - manipulatorul URI specializat - preia
cererea si o trimite mai departe pentru executie. Rezultatul executiei este returnat
apoi serverului Web, care, la rândul sau, trimite resursa agentului utilizator.
Server-Side Includes (SSI)
Un SSI reprezinta un mecanism simplu care permite crearea imediata a paginilor
HTML compuse din fragmente de text. Acest mecanism este implementat de un pre-
procesor pentru paginile HTML, care în mod normal este integrat în serverele web
moderne.
O pagina HTML care foloseste SSI este transmisa catre pre-procesor atunci când un
browser Web le solicita. Iesirea pre-procesor-ului este apoi livrat de catre server.
Serverul identifica în general astfel de pagini printr-o extensie speciala de fisier (în
mod normal, shtml).
Comenzile utilizate pentru a controla pre-procesorul sunt incluse în comentariile
SGML si au urmatoare forma:
<!--#atributul comenzii=valoare ... atribut=valoare -->
Valoarea comenzii specifica tipul comenzii, care este parametrizat de catre o lista
atribut-valoare. SSI accepta urmatoarele comenzi:
· include: aceasta comanda este înlocuita de continutul unui fisier, specificata fie
prin calea catre un fisier sau un URL (prin intermediul unui fisier sau atribut virtual).
· exec: acesta este un program la care calea catre fisierul acestuia este
specificata de atributul cmd. Este executat sale de productie si înlocuieste comanda.
Anumite extensii de SSI (de exemplu, XSSI) includ comenzi suplimentare pentru iesiri
text conditionate sau pentru definirea si returnarea variabilelor.
Desi SSI nu mai este folosit pe o scara larga, tehnologia a avut o contributie majora la
progresul noilor abordari si asupra metodelor moderne de manipulare a URI-urilor.
Cele mai moderne metode de a manipula URI-ri au înlocuit SSI-ul, cu mai multe
concepte. Oricum, SSI-ul poate fi folosit îndeosebi pentru pagini care sunt, în
principal, statice, sau pagini care dispun de mijloace auxiliare de navigare.
CGI/FastCGI
CGI este o interfata standardizata între serverele web si programele de aplicatii care
trimit datele dintr-o cerere HTTP un program al aplicatiei. Programul aplicatiei este
specificat prin formarea unui URL sub forma etichetelor de pe pagina HTML apelata.
Acest program citeste parametrii din cerere, le proceseaza si creaza o iesire (de
obicei un document HTML). Orice limbaj de programare disponibil pe o platforma
server poate fi utilizat; de obicei sunt folosite limbaje ca Perl, C, C++ sau Python. O
mare lipsa a texhnologiei CGI este scalabilitatea limitata, deoarece pentru fiecare
cerere venita trebuie pornit un proces independent. Acest lucru poate determina o
depasire considerabila a resurselor, în special atunci când mai multe cereri
concurente trebuie sa fie procesate. Aceasta situatie a condus la introducerea
FastCGI, un standard care permite programelor de aplicatii sa deserveasca mai multe
cereri în paralel.
Scripting Server-Side
În aceasta sectiune vom prezenta PHP (Hypertext Preprocessor), o solutie
open-source care poate fi folosita în locul solutiei ASP (Active Server Pages) oferite
de Microsoft. Alte tehnologii reprezentative sunt Cold Fusion si JavaScript Server-
Side oferit de Netscape ca o parte a programului LiveWire. Toti agentii URI
mentionati definesc un limbaj de scripting. Comenzile acestor limbaje de scripting
sunt incluse în resursele HTML si executate pe server de catre un interpretor de
scripturi, înainte de livrarea resurselor.
PHP reprezinta o tehnologie open-source si server-side, existând versiuni
disponibile pentru majoritatea serverelor web si pentru toate sistemele de operare.
Similar cu SSI, instructiuni speciale pentru un pre-procesor sunt adaugate în paginile
HTML, care sunt prelucrate de catre acel pre-procesor înainte de a fi transmise.
Scripturile sunt stocate în fisiere speciale, cu extensia de fisier .PHP. În consecinta,
este vorba de implementarea unui suport pentru generarea dinamica a resurselor,
pentru care costul sau de prelucrare este oarecum redus în acea resursa, si care,
odata creata pe server este pastrata într-o memorie cache si poate fi adusa din
cache daca este solicitata ulterior.
În timp ce instructiunile SSI permit inserarea în continutul unui fisier, acesta
nu ofera nici o modalitate de a interveni în fluxul de control al pre-procesorului.
Metodele de scripting pe partea de server permit executarea de codului unui
program încorporat în HTML (asa-numitele scripturi), care sunt scrise într-un limbaj
de programare interpretat.
Conform statisticilor PHP este instalat pe 20 de milioane de situri web si pe 1
milion de servere web, fiind disponibil sub licenta PHP si Free Software Foundation,
fiind astfel un software liber.
Servlet-uri
Testarea este o activitate efectuata pentru a evalua calitatea unui produs si pentru a
îmbunatati-o prin identificarea problemelor si defectelor. Daca vom rula un program
cu intentia de a gasi erori, atunci putem vorbi de testare. Figura 7-1 arata ca testarea
este parte a masurilor de asigurare a calitatii analitice. Prin descoperirea erorilor
existente este determinata calitatea programului testat, în vederea îmbunatatirii
calitatii, acest lucru realizându-se de cele mai multe ori doar prin eliminarea erorilor
gasite.
Putem spune ca o eroare este prezenta în cazul în care rezultatul actual dintr-un test
nu este în conformitate cu rezultat asteptat. Rezultatul asteptat este specificat, de
exemplu, în definirea cerintelor. Aceasta înseamna ca fiecare abatere de la definirea
cerintelor este o eroare; în termeni mai generali, o eroare este "diferenta între
valoarea sau conditia calculata, observata sau masurata si valoarea corecta sau
conditia adevarata, specificata sau teoretic corecta" (standard IEEE 610.12-1990).
Aceasta definitie implica faptul ca definirea cerintelor utilizate ca baza pentru testare
este terminata si disponibila înainte de implementare si testare. Un fenomen comun
în dezvoltarea aplicatiilor web este ca cerintele sunt deseori incomplete, neclare si
reprezinta subiectul unor schimbari frecvente. De obicei, exista o viziune initiala
privind functionalitatea de baza, care este implementata în faza initiala de lansare.
Ca urmare, dezvoltarea ciclului initial de viata este urmata de mici cicluri de
functionalitati adaugate. Abordarile Agile (cum ar fi Extreme Programming) se
concentreaza pe natura evolutiva si repetata a dezvoltarii ciclului de viata fara a
apela la o definire extinsa a cerintelor. În consecinta, obiectivele, preocuparile si
asteptarile partilor interesate (mandatari) trebuie sa constituie baza testarii. Aceasta
înseamna ca, de exemplu, fiecare abatere de la valoarea asteptata în mod firesc de
catre utilizatori este, de asemenea, considerata o eroare.
În acest moment, partile interesate au asteptari diferite, iar unele dintre acestea pot
fi concurente si neclare. Din acest motiv, asteptarile partilor interesate nu vor fi un
reper util pentru a decide daca un rezultat este eronat, cu exceptia cazului în care un
set de asteptari au fost atinse si au fost puse la dispozitie în forma testabila. Pentru a
sprijini testerii în a avea o perspectiva a utilizatorilor si de a întelege mai bine
asteptarile utilizatorilor, acestia ar trebui sa fie implicati cât mai devreme posibil în
identificarea si definirea cerintelor.
Când discutam despre un test ne vom referi la un set de cazuri de testare
pentru un anumit obiect testat (de exemplu, o aplicatie web, componentele unei
aplicatii Web sau un sistem care ruleaza o aplicatie Web). Un singur caz de test
descrie un set de intrari, conditiile de executie, precum si rezultatele asteptate, care
sunt utilizate pentru a testa un anumit aspect al obiectului testat (standard IEEE
610.12-1990).
7.2.2 Caracteristici de calitate
Un utilizator nu asteapta doar ca o aplicatie sa se comporte într-un anumit mod; de
asemenea, se asteapta ca anumite functii sa fie disponibile 24 de ore pe zi si 7 zile pe
saptamâna (24x7). Mai mult, utilizatorii se asteapta ca aplicatia sa fie usor de utilizat,
fiabila, rapida si compatibila cu alte sisteme si versiuni viitoare. Pe lânga
comportament, de o deosebita importanta este testarea aplicatiei prin prisma
cerintelor de calitate (de exemplu, tipurile de caracteristici de calitate asteptate de
catre utilizatori).
În contextul aplicatiilor web, trebuie avute în vedere diferite caracteristici de
calitate. O taxonomie generala pentru caracteristicile de calitate ale produselor
software este specificata în standardul ISO/IEC 9126-1. Acest standard mentioneaza
sase categorii de caracteristici principale: functionalitate, fiabilitate, usurinta în
folosire, eficienta, mentenanta si portabilitate si le divide în continuare în mai multe
sub-caracteristici.
Cerintele de calitate joaca un rol esential în testarea aplicatiilor web. Chiar
daca acestea sunt în general similare cu cerintele de calitate pentru sistemele
software traditionale, ele ajung deseori dincolo de ele. Datorita importantei
caracteristicilor de calitate si diferentelor privind modul în care pot fi testate,
majoritatea metodelor de testare pentru aplicatiile Web se concentreaza pe una sau
câteva caracteristici de calitate. Cu toate acestea, toate caracteristicile de calitate
sunt importante pentru calitatea generala a unei aplicatii Web. Testarea trebuie sa
se asigure ca acestea sunt implementate cu succes.
7.2.3 Obiectivele testarii
Testarea nu va duce la îmbunatatirea calitatii cu exceptia cazului în care erorile sunt
detectate si eliminate. Principalul obiectiv al testarii este de a gasi erori și nu de a
arata absenta lor. Testele software sunt inadecvate pentru a dovedi absenta unor
erori. Daca un test nu gasește erori, atunci acest lucru nu înseamna ca testat cererea
nu contine nici un fel. Acestea, pur si simplu nu au fost înca detectate.
Numarul mare de caracteristici de calitate, toate valorile de intrare si combinatiile de
intrare potentiale care trebuie luate în considerare, inclusiv toate conditiile si
procesele potentiale, fac imposibila realizarea unei testari complete. Chiar si o paleta
larga de teste este de obicei imposibila, datorita ciclurilor de dezvoltare extrem de
scurte. Consecintele inevitabile sunt erorile în functiile testate si un risc mai mare în
apariția erorilor nedetectate. Acestea sunt motivele pentru care testarea tinde spre
o abordare bazata pe risc. Aceste parti ale unei aplicații în care erorile sunt
nedetectate si în care au consecințe critice, ar trebui sa fie testate primele,
acordânduli-se o atenție sporita. Explorând sursele de risc putem semnala defectele
mult mai direct decât pe fundamentarea testelor pe baza cerintelor. În consecinta,
un obiectiv important al testarii este de a aduce riscul la lumina.
Un test rulat are succes daca sunt detectate erori și daca sunt obținute informatii
suplimentare despre problemele si starea aplicației. Testele nereusite, cum ar fi,
testele în care nu sunt gasite erori, sunt "o pierdere de timp". Acest lucru este valabil
mai ales în dezvoltarea aplicatiilor web, în care testarea este în mod necesar limitata
la un minim, datorita resurselor limitate si presiunii de timp extreme în care se
dezvolta aplicatiile Web. Aceasta situatie necesita, de asemenea, descoperirea
erorilor grave cât mai devreme posibil pentru a evita investitiile inutile cum ar fi
costurile de gasire si eliminare a erorilor care cresc dramatic în fiecare etapa de
dezvoltare. Erorile care au aparut în fazele timpurii de dezvoltare sunt greu de
localizat în etapele ulterioare, si eliminarea lor cauzeaza, în mod normal, modificari
ample si necesitatea de a rezolva erorile ulterioare. Prin urmare, testare trebuie
începuta cât mai devreme posibil, preferabil la începutul unui proiect.
Pe scurt, putem spune ca ciclurile de testare, în general, si pentru proiectele
Web în particular, trebuie sa detecteze cât mai multe erori posibile, în mod ideal cât
mai multe erori grave, la cel mai mic cost posibil, într-o perioada cât mai scurta de
timp si cât mai devreme posibil.
7.2.4 Nivele de Test
Pentru a gasi cât mai multe erori posibile testerii trebuie sa aiba o atitudine
"distructiva" fata de testare. O astfel de atitudine este dificila pentru un dezvoltator
care lucreaza la un modul software. Aceeasi perspectiva de abordare face deseori ca
dezvoltatorii sa realizeze aceleasi greseli si neîntelegeri pe perioada de testare,
greseli care au condus la erori pe perioada implementarii. Din acest motiv, (Myers
1979) sugereaza ca dezvoltatorii sa nu testeze propriile produse.
În proiectele web, se observa o focalizare sporita pe testarea unitatilor care sunt
scrise de dezvoltatori. Desi acest lucru este o încalcare a sugestiilor lui Myers, testele
suplimentare sunt, de obicei, efectuate de persoane diferite de dezvoltatorul original
(de exemplu, de catre testerii recrutati de departamentul de afaceri al clientului).
Deoarece calitatea este întotdeauna o problema de echipa, o separare stricta a
testarii si dezvoltarii nu este recomandabila si prezinta un risc inerent în
împiedicarea cooperarii între programatori si testeri. În esenta, obiectivul urmarit
este de a detecta erori, erori care vor fi eliminate de catre dezvoltatori. În acest
scop, se recomanda o comunicare si o întelegere reciproca. Acest lucru înseamna
pentru tester: "Cel mai bun tester nu este cel care gaseste cele mai multe bug-uri
sau care stânjeneste majoritatea programatorilor. Cel mai bun tester este cel care
depisteaza cele mai multe bug-uri fixe. ".
Deoarece echipele de proiect web sunt multidisciplinare si cooperarea în echipa
este, de obicei, de scurta durata, este dificil pentru membrii echipei sa stabileasca un
nivel superior de încredere, necesara pentru o colaborare strânsa între dezvoltatori
si testeri.
7.3 Teste specifice ingineriei web
Elementele de baza prezentate anterior se aplica atât la testarea software-ului
traditional cât si în aplicatiile web. Testarea aplicatiilor web este diferita de testarea
produselor software traditionale, lucru datorat caracteristicilor specifice aplicatiilor
web:
. erorile din "continut" pot fi deseori gasite doar prin masuri costisitoare sau
organizationale (de exemplu, prin corectarea greselilor). Formularele simple de
verificare automata (de exemplu, un corector ortografic) sunt foarte valoroase, dar
sunt limitate la o paleta redusa de depistare a potentialelor defecte. Meta-
informatiile despre structurarea si semantica continutului sau despre un sistem de
referinta care furnizeaza valori comparative, sunt deseori o conditie prealabila
pentru a putea efectua testele de profunzime. Daca aceste premise nu sunt
disponibile, trebuie gasite alte abordari. De exemplu, daca apar schimbari frecvente
privind modificarea datelor legate de cantitatea de zapada dintr-un sistem de
informare turistica, acestea nu pot fi testate cu acuratete prin intermediul meta-
informatiilor sau valorilor comparative, si, în consecinta, valabilitate datelor poate fi
restrictionata euristic la doua zile pentru a se asigura actualitatea datelor.
. când testam structura hipertext, trebuie sa ne asiguram ca paginile sunt legate în
mod corect (de exemplu, fiecare pagina trebuie sa fie accesibile printr-o legatura si,
la rândul sau, ar trebui sa aiba o legatura înapoi la structura hipertext). În plus, toate
legaturile trebuie sa duca la pagini existente, adica, nu trebuie sa fie "întrerupte".
Legaturile nefunctionale sunt erori frecvente atunci când legaturile statice
predefinite devin invalide (de exemplu, atunci când se face referire la o pagina web
externa, care a fost eliminata sau s-a schimbat structura acesteia). O alta sursa de
erori este navigarea prin intermediul functiilor browser-ului web (de exemplu,
"Înapoi în Istoric", în asociere cu starile în care o aplicatie web poate fi). Un exemplu
tipic întâlnit este: daca un utilizator adauga un articol în cosul de cumparaturi virtual
în timp ce realizeaza cumparaturi online, atunci acest articol va ramâne în cosul de
cumparaturi, chiar daca utilizatorul se duce cu un pas înapoi în istoricul browser-ului,
afisând pagina anterioara fara acel articol.
. cerintele soft, subiective de pe nivelul prezentare al aplicatiilor web (de exemplu,
"estetica"), sunt dificil de specificat. Cu toate acestea, ele sunt este o conditie
prealabila esentiala pentru tester pentru a putea distinge în mod clar si obiectiv
comportamentul acceptabil (si de dorit) la defectele de comportament. Mai mult,
doar câteva metode si tehnici traditionale pentru testarea software-ul sunt adecvate
pentru testarea prezentarii. Pentru a testa o prezentare, trebuie sa fie utilizate
metode din alte discipline (de exemplu, publicistica tiparita si masurile
organizationale), în aceeasi masura cu asigurarea calitatii continutului.
. numarul mare de dispozitive si caracteristicile lor diferite de performanta
(distribuirea multi-platforma) reprezinta o alta provocare. Chiar daca un tester
dispune de toate dispozitivele posibile, acesta ar trebui sa ruleze cazurile de test
pentru fiecare dispozitiv. Desi simulatoarele pentru dispozitive pot fi de ajutor daca
tester-ul nu dispune de dispozitivul fizic, ele însele prezinta în majoritatea cazurilor
defecte.
. datorita disponibilitatii si utilizarii globale ale aplicatiilor web, exista o serie
de provocari în ceea ce priveste multi-lingvismul si usurinta în folosire în testarea
aplicatiilor web. Provocarea principala este de a recunoaste interdependentele
culturale si le ia în considerare în mod adecvat de test. De exemplu, ordinea de citire
în diferite culturi (de exemplu: araba, chineza) implica folosirea de ajutoare de
navigare laterale în fereastra browser-ului. O alta dificultate provine din lungimea
diferita a mesajelor de tip text în limbi diferite, care poate determina probleme în
afisarea layout-ului.
. "tineretea" si "multi-disciplinaritatea" echipelor sunt adesea legate de slaba
acceptare a metodologiilor si de nepromptitudinea în efectuarea testarii. Deseori,
trebuie acumulate pe parcurs cunostinte despre metodele, tehnologiile si
instrumentele necesare pentru realizarea testarii. De asemenea sunt necesare
puncte de vedere diferite cu privire la testare. Numai o echipa formata din membri
cu experienta vor ajunge la o decizie corecta despre volumul testarii - prea multa
testare poate fi la fel de neproductiva ca cea insuficienta. Testerii sunt deseori
tentati sa testeze tot în întregime, mai ales la început.
. aplicațiile web constau dintr-un numar de diferite componente software (de
exemplu: servere web, baze de date, middleware) si sisteme integrate (de exemplu:
sisteme ERP, sisteme de management al continutului), care sunt oferite de diferiți
furnizori, si implementate cu ajutorul unor tehnologii. Aceste componente formeaza
infrastructura tehnica a aplicatiilor Web. Calitatea unei aplicatii Web este în principal
determinata de calitatea tuturor componentelor software singulare si de calitatea
interfetei dintre ele. Aceasta înseamna ca, pe lânga componentele dezvoltate într-un
proiect, va trebui sa testam componentele software furnizate de parti terte, dar si
integrarea si configurarea acestor componente. Multe erori în aplicatiile web rezulta
din "imaturitatea" unei componente software, "incompatibilitatea" între
componentele software, sau defecte de configurare a componentelor software
corecte.
. "imaturitatea" majoritații metodelor și instrumentelor de testare reprezinta
provocari suplimentare pentru testeri. Daca o aplicatie Web este implementata cu o
tehnologie noua, de cele mai multe ori nu exista înca metode si instrumente de
testare adecvate. Daca instrumentele de testare devin disponibile, multe dintre ele
sunt imature, prezinta defecte si dificil de utilizat.
. "dominanta schimbarii" face ca testarea aplicatiilor web sa fie mai complexa decât
testarea software-ului traditional. Cerintele si asteptarile utilizatorilor, platformele,
sistemele de operare, tehnologiile si configuratiile Internet, modelele de afaceri si de
asteptarile clientilor, dezvoltarea si testarea bugetelor sunt subiectul unor frecvente
modificari pe tot parcursul ciclului de viata al unei aplicatii Web. Adaptarea la
cerintele noi sau modificate este dificila pentru ca functionalitatea existenta trebuie
sa fie reanalizata, ori de câte ori se face o schimbare. Aceasta înseamna ca un singur
fragment de functionalitate trebuie sa fie testat de mai multe ori, în ideea realizarii
unor teste automate si repeatable. Acestea pun accentul în special pe teste de
regresie, care verifica daca ceea ce s-a lucrat functioneza dupa o anumita schimbare.
Upgrade-urile si migrarea aplicatiilor web, determinate de schimbarile permanente
ale platformelor, sistemelor de operare sau hardware-ului, trebuie sa ruleze si sa
dovedeasca ca sunt un succes în mediul de test, pentru a ne asigura ca nu vor fi
probleme neasteptate în mediul de productie.
7.4 Abordari privind testarea
Abordarile Agile (cum ar fi Extreme Programming) sunt din ce în ce mai folosite în
proiectele web. În timp ce abordarile Agile se concentreaza pe colaborare,
abordarile traditionale se focalizeaza pe planificarea si managementul proiectului. În
functie de caracteristicile unui proiect web, poate fi necesara realizarea activitatilor
de testare folosind atât abordarile Agile cât si cele traditionale pe parcursul
proiectului. (Boehm si Turner 2003) descriu pe larg modul de a gasi a un echilibru
corect între agilitate si disciplina în proiecte. În continuarea, vom prezenta
caracteristicile abordarilor de testare traditionale si Agile, si vom evidentia modul în
care acestea difera.
7.4.1 Abordarile traditionale
Din perspectiva unei abordari traditionale, activitatile de testare dintr-un proiect
includ planificarea, pregatirea, executarea si raportarea:
. Planificarea: pasii planificarii definesc obiectivele de calitate, strategia generala de
testare, planurile de test pentru toate nivelurile de test, metodele metrice si de
masurare si testarea mediului.
. Pregatirea: Acest pas implica selectarea tehnicilor si instrumentelor de
testare si specificarea cazurilor de test (inclusiv datele de test).
. Executarea: Acest pas pregateste infrastructura de test, executa cazurile de test si
în final documenteaza si evalueaza rezultatele.
. Raportarea: Acest pas final rezuma rezultatele testelor si genereaza rapoartele
testarii.
Abordarile traditionale definesc rezultatele muncii (de exemplu, planul de calitate,
strategia de testare, planurile de test, cazurile de test, masuratorile testarii, mediul
de testare, rapoartele de testare) si rolurile (de exemplu, managerul testarii,
consultantul testarii, specialistul testarii, specialistul instrumentelor de testare),
precum si pasii detaliati pentru a crea rezultatele (de exemplu, analiza datelor de
test disponibile sau pregatirea/furnizarea datelor de test). Abordarile Agile, definesc
obiectivul de calitate si apoi se bazeaza pe echipa sa se auto-organizeze si sa creeze
un software care îndeplineste (sau depaseste) obiectivul de calitate.
Datorita ciclurilor scurte de a ajunge pe piata în care se dezvolta aplicatiile Web, este
necesar sa selectam doar cele mai importante rezultate ale muncii, rolurile cheie si
sa eliminam pasii de lucru inutili. Activitatile de testare trebuie sa fie începute cât
mai devreme posibil pentru a scurta perioada distribuirii. De exemplu, activitatile de
planificare si de proiectare pot fi finalizate înainte de începerea dezvoltarii, iar
rezultatele muncii pot fi verificate static, de îndata ce acestea devin disponibile.
Figura 7-2 demonstreaza ca acest lucru va scurta perioada de livrare, care respecta
astfel ciclurile scurte de dezvoltare ale aplicatiilor web.
Abordarile Agile presupun ca o echipa va gasi solutii la probleme, în comun si în mod
autonom (se bazeaza pe auto-organizare). Acest lucru se aplica, de asemenea, la
teste. Prin urmare, testarea nu este o chestiune de roluri ci de o mai mai buna
colaborare si utilizare a aptitudinilor disponibile în echipa. Aceasta înseamna ca
testarea este o activitate de dezvoltare integrata. Întreaga echipa este responsabila
pentru calitate si pentru testare.
Abordarile Agile omit activitatile care nu par sa promita un beneficiu imediat.
De exemplu, ele documenteaza anumite aspecte sau scriu planuri de test; în schimb,
ele comunica direct, exprimând în mod clar asteptarile. Membrii echipei trebuie sa
coopereze strâns si sa se "înteleaga" reciproc pentru a se asigura ca erorile sunt
depistate si analizate rapid, eliminate în mod eficient.
Într-o abordare Agile, dezvoltatorii efectueaza testarea unitaților, adica ei își
testeaza propria munca. Prin automatizarea acestor teste ale unitaților, acestea pot
fi folosite ca mici "detectoare ale schimbarii". De fiecare data când o mica porțiune
din aplicație nu mai functioneaza adecvat, schimbarea va fi detectata imediat.
Întârzierea între apariția unei erori si detectarea acesteia este redusa în mod
semnificativ, ceea ce face mai usor pentru dezvoltatori sa corecteze eroarea,
deoarece activitatile sau modificarile recente sunt înca proaspete în mintea lor. Pe
lânga feedback-ul rapid, testele automatizate sunt o cerinta prealabila importanta
pentru ciclurile scurte de dezvoltare si pentru refactoring (reproiectarea unui
program pastrându-se semanticile pentru reducerea redundanței si cresterea
calitații proiectarii).
Într-o echipa poate exista un tester dedicat, acceptat de echipa de
dezvoltatori care îsi asuma calitatea de conducator pentru asigurarea calitații, în
cadrul echipei. De asemenea, un tester poate pregati teste functionale (care sunt pe
un nivel mai mare de abstractizare decât testea unitaților dezvoltatorilor) si face
scripturile de test tolerante la modificari. În plus, tester-ul poate sprijini clientul cu
teste functionale scrise.
Urmatoarele practici de Extreme Programming (XP) au o influenta speciala asupra
asigurarii testarii si calitatii:
. programarea în pereche: accelereaza schimbul de cunostinte între dezvoltatori,
între dezvoltatori si testeri si, în general, în cadrul echipei. Similar cu inspectarea
software-ului, ajuta la detectarea din timp a erorilor.
. un client de pe site: este disponibil pentru întrebari privitoare la cerinte, în orice
moment si ia decizii în acest sens. Împreuna cu tester-ul, clientul de pe site
pregateste pentru testele functionale, care pot fi folosite pentru testele de
acceptare ulterior.
. integrarea continua: ne asigura ca acești mici pasi contribuie la minimizarea riscului
la modificari, si parcurge toate testele pentru o verificare continua a faptului ca
întregul sistem este infailibil.
. testarea înainte de dezvoltare: se refera la faptul ca testele sunt scrise înainte de
cod, asigurându-se ca "dezvoltatorii", se gândesc la "ce" înainte de a implamenta
"cum". Aceste teste sunt automatizate, astfel încât acestea sa poata fi folosite
pentru o integrare continua.
Abordarea Agile se refera în principal la testarea unitaților si la testele de acceptare.
În contrast, abordarile conventionale sunt folosite pentru integrarea și testarea
sistemului ("testarea în ansamblu").
7.5 Schema de testare
Aceasta sectiune descrie o schema generica pentru testarea aplicatiilor Web.
Schema de baza merges de test - test de cazuri, caracteristici de calitate, si de
nivelurile de test - descrise mai sus într-o uniforma si usor de setare. Schema
reprezinta un model pentru aplicatii Web de testare proiectat pentru a întelege mai
bine cum pot fi organizate de testare si de a sprijini sistematic, cuprinzator, si-a
riscului de testare constient de abordare. În formularul de aici si-a prezentat,
sistemul poate fi folosit pentru a vizualiza aspectele implicate în testare, structura
toate testele, si va servi ca un vehicul de comunicare pentru echipa.
This section describes a generic scheme for Web application testing. The scheme
merges the testing basics - test cases, quality characteristics, and test levels -
described above into a uniform and manageable setting. The scheme represents a
model for Web application testing designed to better understand how testing can be
organized and to support a systematic, comprehensive, and risk-aware testing
approach. In the form introduced here, the scheme can be used to visualize the
aspects involved in testing, structure all tests, and serve as a communication vehicle
for the team.