Cerintele Software Si Aplicatiile Web

Cuprins

Introducere

Capitolul 1

Documentația software

1.1 Documentația software

1.2 Documentația cerințelor

1.3 Documentatia arhitecturii

1.4 Documentația tehnică

1.5 Documentația pentru utilizatori

Capitolul 2

Limbajul de programare PHP

2.1 Introducere

2.2 Tipuri de date

2.3 Obiecte

2.4 Funcții

Capitolul 3

Baze de date MySQL

3.1 Introducere

3.2 Cerințe de sistem

3.3 Replicarea bazelor de date

Capitolul 4

Aplicația software – funcții oferite

Capitolul 5

Aplicația software – detalii de implementare

Concluzii

Introducere

Cerințele software sunt descrieri ale diferitelor nevoi ale unui sistem software din perspectiva organizațiilor sau persoanelor care vor utiliza sistemul. Ele sunt, în general, scrise sub forma unuia sau mai multor documente înainte de începerea dezvoltării software și sunt utilizate pentru a da indicații echipelor de programare. Este important ca cerințele să fie definite cu precizie, complete și fără ambiguități. Acest lucru nu este întotdeauna posibil, iar unele fluxuri de lucru de dezvoltare de software preferă progres iterativ peste cerințele strâns limitate, dar, în general, cu cât mai multe informații și detalii programatori le pot da înaintea începerii unui proiect, cu atât mai mult produsul final va fi în conformitate cu așteptările.

O aplicație web este un program care interacționează cu utilizatorii prin intermediul unui browser web într-o rețea. În timp ce un server web poate răspunde la cererile cu fișiere statice, o aplicație web de obicei se ocupă de cererile în mod dinamic prin construirea răspunsului prin programare. Aplicatiile web sunt fundamentul de site-uri web interactive. Ele sunt denumite uneori cu mai puțină exactitate ca o serie de aplicații internet bogate.

Aplicațiile web sunt formate din mai multe componente sau niveluri. Fiecare este gandit de multe ori ca un strat, unul construit peste un altul. La un nivel minim, există două niveluri: client (browser web) și serverul (aplicație web). Toate componentele trebuie să ruleze pe o formă de sistem de operare, prin urmare, sistemul de operare este, în general, nu considerat ca un strat. Aici diferitele posibile nivele ale aplicației web sunt descrise de jos în sus.

Cele mai multe aplicații web sunt construite cu date dinamice. Aceste date sunt de obicei stocate într-un server de baze de date, sau, uneori, într-o altă formă de depozitare pe termen lung. Unele date sunt de așteptat să se schimbe de multe ori, cum ar fi într-un coș de cumpărături sau forum de discuții. Alte date se pot schimba mai puțin, cum ar fi hărți, sau documentația de ajutor. Tipul de stocare a datelor depinde de formatul datelor, frecvența schimbării sale și modul în care aceasta va fi utilizată.

Aplicațiile web cu cantități mari de date, de multe ori, întampină probleme de performanță datorită bazei de date. Selectarea și configurarea de servere de baze de date au un impact mare asupra performanței și scalabilității. Stocarea distribuită și cache-ul datelor sunt de multe ori alegeri bune pentru site-uri web care se așteaptă o creștere puternică.

Nucleul unei aplicații web este serverul de aplicații. Serverul se ocupă de cereri de la browser-ul web și construiește răspunsul adecvat. O aplicație web poate asculta direct cereri HTTP. Cu toate acestea, de cele mai multe ori, un server web generic, cum ar fi Apache's httpd, așteapta cereri și le transferă aplicației corespunzătoare. Astăzi, componenta server de aplicatii web sunt de cele mai multe ori scrise în Java, Perl, PHP, Python, sau NET

Stratul superior, la cele mai multe aplicații web, este browser-ul web, care interacționează direct cu utilizatorul. Aceasta este componenta peste care dezvoltatorii de aplicatii web au cel mai puțin control, ca un server web public, orice versiune a oricărui browser web pot încerca să se conecteze și să interacționeze. Prin urmare, standardele pentru site-urile web publice sunt extrem de importante. Browsere trebuie sa suporte standardele comune, astfel încât acestea pot fi utilizate cu cea mai largă gamă site-uri web. Și aplicații web nevoie să suporte standardele comune, astfel încât acestea să nu înstrăineze orice tip de potențiali utilizatori.

Astăzi, cele mai multe aplicatii web utilizează HTML sau XHTML pentru browser-ul web, de multe ori folosesc JavaScript și/ sau Flash pentru a face conținutul dinamic și mai interactiv.

Capitolul 1

Documentația software

1.1 Documentația software

Documentația este o parte importantă ingineriei software. Tipurile de documentație includ:

Cerințe – Declarații care identifică atribute, capabilități, caracteristici sau calitățile unui sistem. Acesta este fundamentul pentru ceea ce trebuie să fie sau a fost implementat.

Arhitectura / Design – Prezentare generală a software-ului. Include relații la un mediu și principii de construcție pentru a fi utilizate în proiectarea componentelor software.

Tehnica – Documentația cod, algoritmi, interfețe, și API-uri.

Utilizatorul final – Manuale pentru utilizatorul final, administratorii de sistem și personalul de sprijin.

1.2 Documentația cerințelor

Documentația cerințelor este descrierea a ceea ce face sau va face un anumit software. Acesta este folosit în timpul dezvoltării pentru a comunica ceea ce software-ul face sau va face. De asemenea, este folosit ca o bază pentru un acord asupra a ceea ce trebuie să facă software-ul. Cerințele sunt produse și consumate de către toți cei implicați în producerea software: utilizatorii finali, clienții, manageri de produs, manageri de proiect, vanzarile, marketing-ul, arhitecții software, inginerii de uzabilitate, designerii, dezvoltatorii, testeri și mulți alții. Astfel, cerințele de documentare au mai multe scopuri diferite.

Cerințele vin într-o varietate de stiluri, notații și formalități. Cerințele pot fii orientate către scop (e.g. rețea distribuită), apropiate de design (e.g. lansarile se pot face prin selectarea unui fisier de configurare și selectarea funcției „lansare”), precum și între cele două. Ele pot fi specificate ca declarații în limbaj natural, ca figuri desenate, formule matematice detaliate și ca combinații între ele.

Variația și complexitatea documentației cerințelor este o provocare dovedită. Cerințe pot fi implicit greu de descoperit. Este dificil să ști exact cât de mult și ce fel de documente este nevoie, cât de mult poate fi lăsată la arhitectura și documentația de proiectare și este dificil să ști cum să documentezi cerințele având în vedere varietatea de oameni care trebuie să citească și să utilizeze documentația . Astfel, documentația cerințelor este de multe ori incompletă (sau inexistentă). Fără documentația cerințelor corespunzătoare, modificările de software devin mai dificil și, prin urmare, predispuse la erori (scăderea calității software-ului) și consumatoare de timp prețios.

Nevoia de documentare a cerințelor este de obicei legat de complexitatea produsului, impactul produsului și speranța de viață a software-ului. În cazul în care software-ul este foarte complex sau dezvoltat de către mai multe persoane (de exemplu, software-ul telefonului mobil) cerințe pot ajuta să comunice mai bine ceea ce sa realizat. În cazul în care software-ul este critic pentru siguranță și poate avea un impact negativ asupra vieții umane (de exemplu, sisteme de energie nucleară, echipament medical), este necesară o documentație de cerințe mai formală. În cazul în care este de așteptat software-ul să dureze doar o lună sau două (de exemplu, foarte mici aplicatii pentru telefoane mobile dezvoltate special pentru o anumită campanie) poate fi necesară o documentație de cerințe foarte mică. În cazul în care software-ul este o primă versiune, care va fi reconstruită mai târziu, documentația de cerințe este foarte utilă atunci când se gestionează schimbarea software-ului și la verificarea software-ului atunci când este modificat.

În mod tradițional, cerințele sunt specificate în cerințele de documente (de exemplu, folosind aplicații de procesare de text și aplicații de calcul tabelar). Pentru a gestiona creșterea complexității și a schimba natura de documentare cerințelor (și documentația software-ului in general),sunt susținute sistemul de baze de date și a instrumentelor de management a cerințelor cu scop special.

O introducere a unui document de cerințe ar trebui să includă unei rezumat al proiectului, explicația scopul ei, lista părților interesate și organizațiilor implicate și expunerea oricărei documentații asociate. Elaborarea privind motivația de afaceri pentru construirea sistemului este de ajutor în transmiterea motivelor pentru anumite alegeri sunt făcute pentru a menținerea tuturor celor implicati axat pe obiectivele de bază. De exemplu, unui document de cerințe pentru un site web poate explica publicului vizat, un rezumat a informațiile pe care le va afișa, și referințele pentru a proiecta documente schiță. Într-un alt exemplu, o introducere a unei noi cereri de joc mobil s-ar putea rezuma povestea, dispozitive țintă, și modelul veniturilor.

O altă secțiune a unui document de cerințe ar trebui să explice domeniul de aplicare, constrângerile și ipotezele sistemului de software. Acestea oferă accent în explică limitarea facilităților. Ele pot ajuta, de asemenea, la prevenirea domeniul de aplicare ciudat. O listă de constrângeri este de asemenea critică în timpul programării astfel încât timpul nu este irosit.

1.3 Documentația arhitecturii

Documentația arhitecturii (de asemenea, cunoscut sub numele de descrierea arhitecturii software-ului) este un tip special de document de proiectare. Într-un fel, documentele de arhitecturii sunt derivate din cod. Îndocumentele de arhitecturii este specificat foarte puțin codul în sine. Un document de arhitectură bun este scurt privind detaliile, dar profund privind explicațiile.

Un alt tip de documente de proiectare este documentul de comparație, sau studiul de comerț. Aceasta se concentrează pe un aspect specific al sistemului și sugerează abordări alternative. Ar putea fi în interfața cu utilizatorul, cod, proiectare, sau chiar nivelul de arhitectură. Acesta va sublinia cum este situația, va descrie unul sau mai multe alternative și va enumera argumentele pro și contra pentru fiecare. Un document de studiu de comerț bun este mare privind cercetarea, exprimă ideea sa clar, și cel mai important este imparțial. Acesta ar trebui să explice în mod onest și în mod clar costurile indiferent soluție oferită este cea mai bună. Obiectivul unui studiu de comerț este de a elabora cea mai bună soluție, mai degrabă decât de a susține un anumit punct de vedere. Este perfect acceptabil să nu se precizeze nici o concluzie, sau de a concluziona că niciuna dintre alternative sunt suficient de bune decât nivelul de referință pentru a garanta o schimbare. Ar trebui să fie abordată ca un demers științific, nu ca o tehnica de marketing.

1.4 Documentația tehnică

Aceasta este ceea la ce se referă majoritatea programatorilor atunci când se utilizează documentația software-ului pe termen lung. Când crearea de software, codul este insuficient, trebuie să fie textul, împreună cu aceasta pentru a descrie diferitele aspecte operațiilor proiectate. Este important pentru documentul cod să fie complet, dar nu atât de detaliat încât devin dificil menținerea lui. Mai multe documentații How-to se găsesc anumit pentru produsul software sau aplicația software fiind documentație de API Writers. Această documentație poate fi utilizat de către dezvoltatori, testeri și de clienții finali sau clienții care utilizează această aplicație software. Documentația tehnică a devenit importantă în cadrul organizațiilor, cum ar fi nivelul de bază și nivelele avansate de informații pot schimba într-o perioadă de timp cu schimbări de arhitectură. Prin urmare, documentația tehnică a câștigat importanță în ultimul timp în special în domeniul software.

Adesea, instrumente precum Doxygen, NDoc, javadoc, EiffelStudio, Sandcastle, Robodoc, POD, TwinText, sau Universal Report pot fi utilizate pentru a genera automat document cod, care este, ei extrag comentarii și contracte software, în cazul în care sunt disponibile, de la cod sursă și de a crea manuale de referință în forme cum ar fi text sau fișiere HTML. Documentele cod sunt adesea organizate într-un stil ghid de referință, care să permită unui programator pentru a căuta rapid o functie arbitrară sau de clasă.

Ideea de documentație auto-generatoare este atractiv pentru programatori din diverse motive. De exemplu, pentru că este extras din codul sursă în sine (de exemplu, prin comentarii), programatorul poate scrie în timp se referă la cod, și folosește aceleași instrumente folosite pentru a crea codul sursă pentru a face documentația. Acest lucru face mult mai ușor păstrarea documentației up-to-date. Desigur, un dezavantaj este că numai programatorii pot edita acest tip de documentație și depinde de ei reactualizarea producției. Unii ar caracteriza acest lucru, mai degrabă ca pe un lucru bun decât contra.

Programarea Elucidative este rezultatul unei aplicații practice Literate Programming în contexte reale de programare. Paradigma Elucidative propune ca cod sursă și documentația să fie depozitate separat. Această paradigmă a fost inspirat de aceleași descoperiri experimentale, care au produs Kelp. De multe ori, dezvoltatorii de software trebuie să fie capabili să creeze și să aceseze informații care nu e în plan să facă parte din codul sursă. Astfel de însemnări sunt, de obicei, parte de mai multor activități de dezvoltare de software, cum ar fi portările de cod. Prin urmare,aceste însemnări pot ajuta dezvoltatorul în orice stadiu de dezvoltare de software în cazul în care un documentația sistemului formală ar împiedica progresul. Kelp stochează aceste însemnăr în fișiere separate, care leagă informațiile la codul sursă în mod dinamic.

1.5 Documentația pentru utilizatori

Spre deosebire de documentele de cod, documentele  pentru utilizatori descrie pur și simplu modul în care este folosit un program. În cazul unei biblioteci software, documentul de cod și documentia pentru utilizatori ar putea fi efectiv echivalentă și valorează îmbinate, dar pentru o aplicație generală acest lucru nu este de multe ori valabil.

De obicei, documentația pentru utilizator descrie fiecare caracteristică a programului, și ajută utilizatorul în realizarea acestor caracteristici. Un document  pentru utilizatori bun poate, de asemenea, merge atât de departe încât să ofere asistență aprofundată rezolvarii de probleme. Este foarte important pentru aceste documentele să nu fie confuze și ca acestea să fie la zi. Documentele  pentru utilizatori nu trebuie să fie organizate în nici un fel special, dar este foarte important să aibă un cuprins detaliat.

Coerența și simplitatea sunt, de asemenea, foarte valoroase. Documentația de utilizare este considerată să conțină un contract specificând ce va face software-ul. Scriitori API sunt foarte bine pregatiți la scrierea documentelor pentru utilizatori de bun ca și cum ar fi conștienți de arhitectura software-ul și tehnicile de programare utilizate

Există trei moduri ample în care documentația de utilizare pot fi organizate.

Tutorial: O abordare ghid este considerat cel mai util pentru un utilizator nou, în care acesta este ghidat pas cu pas în realizarea anumitor sarcini.

Tematic: O abordare tematică, unde capitole sau secțiunile se concentrează pe o anumită zonă a interes, este a mai mult de uz general pentru un utilizator intermediar. Unii autori preferă să transmită ideile lor printr-un articol bazat pe cunoaștere pentru a facilita nevoile utilizatorului. Această abordare este, de obicei, practicat de către o industrie dinamică, cum ar fi tehnologia informației, în cazul în care populația pentru utilizatori este în mare măsură corelată cu cerințele rezolvării de probleme.

Lista sau Referință: Ultimul tip a principiului de organizare este unul în care comenzile sau sarcinile sunt pur și simplu, listate în ordine alfabetică sau logic grupate, de multe ori prin cuprinsuri cu referință. Această din urmă abordare este utilizată mai des de către utilizatorii avansați care stiu exact ce fel de informații caută.

O plângere comună în rândul utilizatorilor în ceea ce privește documentația software-ului este faptul că doar una din aceste trei abordări a fost dus la excluderea celorlalte două. Se obijnuiește să se limiteze furnizarea documentație software pentru calculatoare personale de ajutor online, care dau doar referire la informații cu privire la comenzi sau elemente de meniu. Locul de muncă de îndrumare de noi utilizatori sau de a ajuta utilizatorii mai experimentați să obțină mai mult dintr-un program care este lăsat la edituri private, ce este de multe ori de un ajutor semnificativ dezvoltatorilor de software.

Capitolul 2

Limbajul de programare PHP

2.1 Introducere

PHP este un limbaj de programare. Numele PHP provine din limba engleză și este un acronim recursiv : Php: Hypertext Preprocessor.

Folosit inițial pentru a produce pagini web dinamice, este folosit pe scară largă în dezvoltarea paginilor și aplicațiilor web. Se folosește în principal înglobat în codul HTML, dar începând de la versiunea 4.3.0 se poate folosi și în mod „linie de comandă” (CLI), permițând crearea de aplicații independente.

Este unul din cele mai importante limbaje de programare web[2] open-source și server-side, existând versiuni disponibile pentru majoritatea web serverelor și pentru toate sistemele de operare. Conform statisticilor este instalat pe 20 de milioane de situri web și pe 1 milion de servere web[3].

Este disponibil sub Licenṭa PHP ṣi Free Software Foundation îl consideră a fi un software liber.

Inițial, limbajul a fost dezvoltat de inventatorul său, Rasmus Lerdorf. Odată cu creșterea numărului de utilizatori, dezvoltarea a fost preluată de o nouă entitate, numită The PHP Group (Grupul PHP).

2.2 Tipuri de date

PHP stochează numere întregi într-un interval dependent de platformă. Variabile întregi pot fi atribuite folosind zecimale (pozitive și negative), octale și notații hexazecimale. Numerele reale sunt, de asemenea, stocate într-un interval specific alplatformei, ele pot fi specificate folosind virgulă mobilă, sau două forme de notație științifică.

PHP are un tip boolean nativ. Regulile sale de conversie de tip permite valori diferite de zero pentru a fi interpretat ca adevărat și zero ca fals. Tipul de date nulă reprezintă o variabilă care nu are nici o valoare.

Variabilele de tipul resursă reprezintă trimiteri la resurse externe pentru interpretor. Acestea sunt de obicei create de funcții de la o anumită extensie. Exemplele includ fișiere, imagini și resurse bază de date.

Vectorii suportă atât indici numerice cât și șiruri de caractere și sunt eterogeni. Vectorii pot conține elemente de orice tip care PHP le suportă, inclusiv resurse, obiecte, și chiar și alți vectori. Ordinea este păstrată în liste de valori și în hash-uri cu chei și valori, precum și cele două pot fi combinate.

2.3 Obiecte

PHP oferă o funcționalitate de programare orientată obiect, inclusiv clase, interfețe, și vizibilitate publică / privată / protejată a variabilelor membre și metodelor. Obiectele instantiate sunt referite pe baza numelui, similar pointer-ilor. În acest fel obiectele sunt transmise prin referință și nu copiate, cu excepția in care sunt colonate în mod explicit.

Obiecte PHP sunt cazuri de clase definite de dezvoltatori sau de mediul de rulare PHP. În mod implicit, obiectele în PHP sunt atribuite și transmise prin referință de versiunea a 5-a a limbii. Aceasta înseamnă că două variabile atribuite atât la același obiect acționează exact asupra aceluiași obiect și nu a copiilor.

2.4 Funcții

Funcțiile sunt blocuri de cod PHP (secvențe de cod) bine delimitate și identificate printr-un nume, ce execută un set de operații. Funcțiile pot fi executate de mai multe ori in cadrul unui script prin simpla apelare a numelui lor.Exista functii predefinite, specifice limbajului PHP (cum ar fi print, empty, etc) ce pot fi folosite in orice moment, fără a fi nevoie de vreo acțiune specială; si există funcții definite de utilizator, scrise practic de programatori. Pentru ca acestea să poata fi folosite este nevoie sa fie declarate și implementate. În PHP, există sute de funcții built-in. Puteți crea propriile funcții. Se poate apela o funcție de oriunde într-o pagină.

Capitolul 3

Baze de date MySQL

3.1 Introducere

MySQL este (din Martie 2014) al doilea cel mai utilizat sistem de administrare a bazelor de date relaționale din lume. Sistemul este numit după fiica co-fondatorului Michael Widenius (My). SQL inseamnă Structured Query Language (Limbaj Query Structurat). Proiectul MySQL și-a facut codul sursă disponibil în condițiile GNU și în o variatate de acorduri proprietare. MySQL a fost deținut și sponsorizat de o singura firmă pentru profit, compania suedeză MySQL AB, care in momentul actual este deținută de Oracle Corporation.

MySQL este o alegere populară pentru folosirea bazelor de date în aplicații web și este o componentă centrală a grămezii de software-uri pentru aplicații web LAMP (și alte grămezi 'AMP'). LAMP este o abreviere pentru "Linux, Apache, MySQL, Perl/PHP/Python". Proiectele software open source gratuite care necesită un sistem complet de administrare a bazei de date folosesc de obicei MySQL.

Pentru uz comercial sunt disponibile mai multe ediții cu plată care oferă funcționalități adiționale. Câteva aplicații care folosesc baze de date MySQL sunt: TYPO3, MODx, Joomla, WordPress, phpBB, MyBB, Drupal și altele. MySQL este de asemenea folosit in multe siteuri de profil înalt și de o scara mai mare, printre acestea incluzându-se Wikipedia, Google, Facebook, Twitter, Flickr și YouTube.

MySQL este un server relațional al bazelor de date popular. Este folosit de asemenea și pentru siteuri dinamice datorită performanței sale rapide și conectivității rapide la alte limbaje cum ar fi PHP. MySQL reprezintă M-ul din software-urile LAMP. Poate folosi multiple motoare de stocare , fiecare dintre acestea reglate pentru performanțe în situații diferite. Pentru scalabilitate asupra mai multor servere el folosește replicarea bazelor de date. MySQL suportă majoritatea standardelor SQL-92..

3.2 Cerințe de sistem

MySQL poate rula pe următoarele sisteme de operare::

BSD

Linux

Mac OS X

Microsoft Windows

UNIX (Solaris, HP-UX, AIX)

MySQL are cerințe de memorie foarte mici. Este cunoscut pentru că rulează pe sisteme Linux cu mai puțin 64MB de RAM. În funcție de setările MySQL, creșterea de memorie disponibile pot îmbunătăți performanța prin a permite ca datele să fie trecute în memoria cache.

3.3 Replicarea bazelor de date

Când un server devine prea ocupat este de obicei de preferat adăugarea mai multor servere pentru a crește performanța generală a aplicației. În timp ce un server multi-procesor mare ar putea funcționa bine, multiple servere mai mici sunt de obicei cost-eficiente.

MySQL dispune de metoda master/slave pentru replicarea bazelor de date. Metoda master/slave este în sens unic și asincronă. Sunt posibile atât replicări master singulare și multiple, dar de obicei replicarea master singulară este mai simplă de îtreținut și mai ușor de dezvlotat. În replicarea master singulară, un server se comportă ca stapân în timp ce unul sau mai multe servere au rolul de sclav.

În replicarea master singulară, serverul stăpân scrie actualizări pentru fișierele log binare. Log-urile sunt înregistrate cu tabele de sistem. Fișierele binare stochează fiecare actualizare care e facută bazei de date. Când un „sclav” se conectează la „stăpânul” său, stăpânul este informat de poziția în care a ajuns să citească înregistrările și de ultima actualizare reușită a serverului sclav. “Sclavul” primește orice actualizare care a fost facută și apoi așteaptă să fie notificat când apar actualizări noi.

Poate fi realizat un lanț de servere atunci cand un sclav este facut stăpân pe alte servere.

Când este folosită replicarea toate actualizările schemei bazei de date care sunt replicate ar trebui făcute asupra serverului stăpân. Acest lucru evită conflictele care pot apărea când stăpânul și sclavul sunt actualizați separat.

În timp ce setarea replicării master/slave este relativ ușoară, aplicațiile pot fi scrise în moduri variate pentru a putea folosi în mod corect servere multiple. Trebuie făcute considerații speciale când se construiește o aplicație pentru ca aceasta să poată face o replicare a bazei de date.

Capitolul 4

Aplicația software – funcții oferite

Aplicația poate fi folosită doar de administrator și managerii sau editorii adăugați de administratorul paginii. Administratorul are acces pe toate secțiunile aplicației și in mod unic pe pagina “Administrare aplicație”, vizibilă doar de el unde poate edita și agăuga aplicații și utilizatori. Secțiunile paginii web vizibile de către toți utilizatorii sunt Documentații Cerințe, Documentații Design, Documentații Implementare, Documentații Testare și Documentații Tehnice, unde se pot vizualiza, modifica, șterge, adăuga sau descărca anumite documentații de proiecte în funcție de accesul utilizatorului și de secțiunea aleasă.

Pagina de autentificare

Permite autentificarea utilizatorilor aplicației și previne accesul de utilizare a acesteia de către persoanele neautorizate.

Este compusă dintr-o bară de meniu ce conține titlul aplicației precum și formularul pentru autentificare.

Bara de meniu

Conține titlul aplicației în partea stângă precum și opțiunile de interacțiune cu aplicația, grupate sub formă de butoane în partea dreaptă.

De asemenea sunt oferite detaliile despre utilizatorul curent (numele și rolul acestuia) în partea stângă și opțiunea de de-autentificare sub forma unui buton în partea dreaptă.

În funcție de rolul utilizatorului curent, poate conține în plus și un buton către pagina generală de administrare a aplicației.

Titlul aplicației este prezent sub forma unui link, care în funție de rolul utilizatorului curent va face referire la pagina principală special destinată rolului utilizatorului respectiv.

Pagina de administrare a aplicației

Aceasă pagină este accesibilă doar utilizatorilor cu rol de administratori ai aplicației. Conține mai multe interacțiuni de administrare posibile, grupate în secțiuni.

Primele doua secțiuni se referă la administrarea utilizatorilor aplicației – Adaugare utilizatori și Editare utilizatori.

În cazul adăugării unui utilizator, avem posibilitatea de a-i seta un nume, o parolă precum și rolul în cadrul aplicației (administrator, manager sau editor de documentație).

În secțiunea destinată editării utilizatorilor, avem posibilitatea de a modifica numele, parola sau rolul unui utilizator, precum și posibilitatea de a-l șterge complet din aplicație.

Următoarele două secțiuni se referă la posibilitatea editării proiectelor aplicației.

Putem adăuga un proiect setându-i titlul și managerul responsabil de documentarea proiectului respectiv sau putem edita proiectele existente deja în cadrul aplicației. În cazul editării, putem schimba denumirea proiectului și managerul, precum și să ștergem complet proiectul respectiv.

Confirmarea acțiunilor importante

În toate secțiunile aplicației, indiferent de pagină, operațiunile de modificare sau ștergere ne prezintă un dialog de confirmare pentru opțiunea respectivă.

Aceste confirmări sunt extrem de importante, în special în cazul operațiunii de ștergere, care duce la pierderea ireversibilă a datelor respective.

Notificarea despre rezultatul unei acțiunii efectuate

Aplicația ne notifică despre rezultatul fiecarei acțiuni efectuate. Aceasta se poate finaliza fie cu succes, fie prin generarea și afișarea unei erori (a bazei de date).

Selectarea proiectului curent

Datorită faptului că aplicația permite documentarea mai multor proiecte simultan, această secțiune, prezentă pe fiecare pagină relevantă a aplicației permite comutarea între proiectele aplicației.

De asemenea, în funcție de utilizatorul autentificat, se pot selecta din listă doar acele proiecte în cadrul cărora utilizatorul are drepturi. În caz contrar, este afișat un mesaj de avertizare.

Notă – administratorii aplicației au acces la toate proiectele.

Pagina de documentare a cerințelor proiectului

Compusă din două secțiuni – Documentații cerințe și Adăugare cerințe.

Prima secțiune prezintă o listă a cerințelor proiectului curent, oferind informații despre data la care a fost adăugată cerința, cine a adaugat cerința respectivă, titlul cerinței, precum și opțiunile disponibile (modificarea și ștergerea sunt rezervate doar administratorilor și managerului de documentare a proiectului respectiv, în timp ce opțiunea de vizializare a cerinței este accesibilă de către orice utilizator asignat proiectului respectiv).

Utilizatorii cu rol de editor de documentație nu au acces la opțiunile de modificare sau ștergere. Aceștia au doar posibilitatea de a vizualiza cerințele adăugate de către managerii proiectelor.

De asemenea, în cazul vizualizării unei cerințe, aceasta va fi afișată în mod doar cu drept pentru citire către utilizatorii cu rol inferior sau cu drept de editare a conținutului pentru cei care au acest drept.

Utilizatorii fără drepturile necesare, vor avea doar posibilitatea de vizualizare, nu și de editare:

Pagina de documentații de design ale proiectului

Conține două secțiuni – Documentații design și Adăugare document design.

Prima secțiune reprezintă o listă (incluzând și opțiunea de descărcare) a tuturor documentelor urcate pe server care se referă la documnetarea design-ului diverselor componente a proiectului.

Cea de-a doua secțiune – Adăugare document design – oferă posibilitatea urcării unui document (.txt, .doc, .zip, .jpg, etc.) pe server, pentru a putea fii ulterior descărcat și utilizat ca referință în timpul implementării software.

Paginile de documentații de implementare și documentații de testare ale proiectului

Oferă funcționalități similare cu cele descrise mai sus:

Pagina de documentații tehnice ale proiectului (destinate utilizatorilor)

Este utilizată în scopul de-a crea „manualul de documentație tehnică”, destinată utilizatorilor finali (beneficiarilor) proiectului în cauză.

Compusă din două secțiuni – Documentații tehnice și Adăugare secțiune – are scopul de-a oferi posibilitatea manegerilor de documentație posibilitatea să creeze un document de documentație pe secțiuni.

Aceste secțiuni vor fii apoi unite automat într-un singur document, care poate fii tipărit direct de pe site-ul ce găzduiește aplicația sau descărcat în format PDF și distribuit clienților.

Fiecare dintre aceste secțiuni (definite de către managerul de documentație) poate fii asignată independent, către un editor de documentație (responsabil cu adăugarea și editarea conținutului secțiunii sale).

Editorii de documentație nu au acces de editare decât la secțiunile asignate lor, având doar drept de vizualizare a celorlalte secțiuni.

De asemenea, aceste secțiuni pot fii în orice moment re-ordonare de către managerul de documentație sau de către un administrator a aplicației, pentru a le oferi o aranjare logică în cadrul documentului final. Odată finalizată fiecare secțiune de către editorul responsabil cu editarea ei, se poate genera documentul final prin simpla apăsare a butonului „Vizualizați documentul”.

Pagina de vizualizare a documentului oferă opțiunea de exportare a întreg documentului în format PDF, ce poate fii mai apoi distribuit cu ușurință:

Capitolul 5

Aplicația software – detalii de implementare

Structura de directoare ale aplicației:

Aplicația conține urmatoarele directoare, comune oricarei aplicații web moderne:

– css: conține fisierele CSS, utilizate pentru partea de prezentare vizuala și design

– js: conține fisiere JavaScript, utilizate pentru partea de logica a aplicației

– img: conține imaginile afisate pe paginile aplicației

– fonts: conține fonturile aplicației (inclusiv cele folosite pentru generarea iconitelor)

– templates: conține fisiere PHP sabloane, incluse în mai multe pagini ale aplicației

În plus fata de cele enumerate mai sus, directorul „documente” este utilizat pentru salvarea fisierelor urcare pe server de către utilizatorii aplicației.

În funcție de sectiunea din cadrul aplicației unde sunt accesate fisierele, acesta conține la rândul lui următoarea structura de documente:

– design: pentru fișiere referitoare la documentații de design

– implementare: pentru fișiere referitoare la documentații de implementare

– testare: pentru fișiere referitoare la documentații de testare

Fișierele php ale aplicatiei:

În directorul templates, cele 3 fișiere comune incluse in fiecare pagină a aplicației sunt header.php, selecție-proiecte.php și footer.php:

header.php – Inclus la începutul fiecarei pagini, conține variabilele de sesiune, conectarea la baza de date, precum și partea de început a șablonului html:

<?php

session_start();

$id_utilizator_curent = $_SESSION['id_utilizator_curent'];

$nume_utilizator_curent = $_SESSION['nume_utilizator_curent'];

$rol = $_SESSION['rol'];

($_SESSION['prima_pagina']) ? $prima_pagina = $_SESSION['prima_pagina'] : $prima_pagina = '/';

($_SESSION['proiect_curent']) ? $proiect_curent = $_SESSION['proiect_curent'] : $proiect_curent = '';

// conectare la baza de date

$con = mysqli_connect("localhost","adminILaP4xM","EUT6An_5shSD","docs");

if (mysqli_connect_errno()) {

echo "Eroare de conectare la baza de date: " . mysqli_connect_error();

die();

}

?>

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8">

selecție-proiecte.php – conține meniul de comutare între proiecte:

<?php

if($rol == 'administrator') {

$res = mysqli_query($con, "SELECT * FROM proiecte");

}

else if($rol == 'manager') {

$res = mysqli_query($con, "SELECT * FROM proiecte where manager = '$id_utilizator_curent'");

}

while($rand = mysqli_fetch_array($res)) {

$asignare = true;

$selected = '';

if ($rand['id'] == $_SESSION['proiect_curent']) {

$selected = 'selected';

}

echo '<option value="' . $rand['id']. '"' . $selected . '>' . $rand['titlu'] . '</option>';

}

footer.php – Inclus la sfârșitul fiecărei pagini, conține subsolul paginilor cu informațiile despre autor, încărcarea fisierelor JavaScript si de-conectarea de la baza de date:

<script src="js/aplicatie.js"></script>

</body>

</html>

<?php

// deconectare de la baza de date

mysqli_close($con);

?>

index.php – Fișierul încărcat la pornirea aplicației, conține formularul de autentificare:

<form id="login-form" role="form" action="autentificare.php" method="post">

<div class="col-sm-8 col-sm-offset-2">

<label for="utilizator" class="invisible">Utilizator</label>

<input type="text" name="utilizator" id="utilizator" class="form-control col-sm-5" placeholder="Utilizator" required autofocus>

</div>

<br><br>

<div class="col-sm-8 col-sm-offset-2">

<label for="parola" class="invisible">Parola</label>

<input type="password" name="parola" id="parola" class="form-control" placeholder="Parola" required>

</div>

<br>

<div class="col-sm-8 col-sm-offset-2">

<label for="autentificare" class="invisible">Autentificare</label>

<button name="autentificare" id="autentificare" class="btn btn-lg btn-primary btn-block" type="submit"><i class="fa fa-user"></i> Autentificare</button>

</div>

</form>

autentificare.php – este responsabil pentru autentificarea utilizatorilor în aplicație:

$utilizator = $_POST['utilizator'];

$parola = $_POST['parola'];

$mesaj_eroare = "";

$rand = 0;

$res = mysqli_query($con, "SELECT * FROM utilizatori WHERE nume = '$utilizator' AND parola = '$parola'");

deautentificare.php – este responsabil pentru de-autentificarea utilizatorilor din aplicație și redirectarea către prima pagina:

<?php

session_start();

session_unset();

session_destroy();

header ("Location: index.php");

?>

exportare.php – este responsabil pentru generarea fișierului de documentație tehnică și exportarea acestuia în format PDF prin utilizarea unui plugin JavaScript (jsPDF):

<script src="js/jspdf.min.js"></script>

<script src="js/jspdf.plugin.from_html.js"></script>

<script src="js/jspdf.plugin.split_text_to_size.js"></script>

<script src="js/jspdf.plugin.standard_fonts_metrics.js"></script>

<div id="container-document" style="background-color:#fff;padding:40px;margin:50px 0;">

<?php

if(isset($_POST['exportare-sectiuni-exportare'])) {

$q = "SELECT titlu FROM proiecte where id = '" . $_SESSION['proiect_curent'] . "'";

$res = mysqli_query($con, $q);

$rand_proiecte = mysqli_fetch_array($res);

echo '<h1>' . $rand_proiecte['titlu'] . '</h1><br><br>';

$q = "SELECT * FROM sectiuni WHERE project_id='" . $_POST['exportare-sectiuni-proiect'] . "' ORDER BY ordine ASC";

$res = mysqli_query($con, $q);

while($rand = mysqli_fetch_array($res)) {

echo '<h1>' . $rand['ordine'] . '. ' . $rand['titlu'] . '</h1>' . $rand['detalii'] . '<br>';

}

}

?>

</div>

<div id="buton-export"class="text-center"><a href="javascript:toPDF();" class="btn btn-primary btn-lg">Exportati documentul (PDF)</a><br><br></div>

<script>

function toPDF() {

var doc = new jsPDF();

var printHandler = {

'#print': function(element, renderer) {

return true;

}

};

doc.fromHTML($('#container-document').get(0), 10, 10, {

'width': 180,

'elementHandlers': printHandler

});

doc.output('dataurlnewwindow');

}

</script>

administrare.php – Conține pagina de administrare

documentatii-cerinte.php – Conține pagina de documentații ale cerințelor

documentatii-design.php – Conține pagina de documentații de design

documentatii-implementare.php – Conține pagina de documentații de implementare

documentatii-testare.php – Conține pagina de documentații ale testare

documentatii-tehnice.php – Conține pagina de documentații tehnice

aplicație.php – Conține pagina de operații logice ale aplicației. Deoarece aceasta pagina este cea mai importantă, componenta a aplicației este listată în continuare în intregime:

<?php

require('templates/header.php');

// Pagina administrare

if(isset($_POST['editare-utilizatori-stergere'])) {

$q = "DELETE FROM utilizatori WHERE id='" . $_POST['editare-utilizatori-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['editare-utilizatori-modificare'])) {

$q = "UPDATE utilizatori SET nume='" . $_POST['editare-utilizatori-nume'] . "', parola='" . $_POST['editare-utilizatori-parola'] . "', rol='" . $_POST['editare-utilizatori-rol'] . "' WHERE id='" . $_POST['editare-utilizatori-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['adaugare-utilizatori-adaugare'])) {

$q = "INSERT INTO utilizatori(nume, parola, rol) VALUES ('" . $_POST['adaugare-utilizatori-nume'] . "', '" . $_POST['adaugare-utilizatori-parola'] . "', '" . $_POST['adaugare-utilizatori-rol'] . "')";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['editare-proiecte-stergere'])) {

$q = "DELETE FROM proiecte WHERE id='" . $_POST['editare-proiecte-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['editare-proiecte-modificare'])) {

$q = "UPDATE proiecte SET titlu='" . $_POST['editare-proiecte-titlu'] . "', manager='" . $_POST['editare-proiecte-manager'] . "' WHERE id='" . $_POST['editare-proiecte-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['adaugare-proiecte-adaugare'])) {

$q = "INSERT INTO proiecte(titlu, manager) VALUES ('" . $_POST['adaugare-proiecte-titlu'] . "', '" . $_POST['adaugare-proiecte-manager'] . "')";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

// Pagina documentații cerințe

else if(isset($_POST['adaugare-cerinte-adaugare'])) {

$q = "INSERT INTO cerinte(data, titlu, manager_id, project_id) VALUES ('" . $_POST['adaugare-cerinte-data'] . "', '" . $_POST['adaugare-cerinte-titlu'] . "', '" . $_POST['adaugare-cerinte-manager-id'] . "', '" . $_POST['adaugare-cerinte-project-id'] . "')";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['editare-cerinte-modificare'])) {

$q = "UPDATE cerinte SET titlu='" . $_POST['editare-cerinte-titlu'] . "' WHERE id='" . $_POST['editare-cerinte-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['editare-cerinte-stergere'])) {

$q = "DELETE FROM cerinte WHERE id='" . $_POST['editare-cerinte-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['actualizare-cerinta-actualizare'])) {

$detalii = mysqli_real_escape_string($con, $_POST['actualizare-cerinta-detalii']);

$q = "UPDATE cerinte SET detalii='" . $detalii . "' WHERE id='" . $_POST['actualizare-cerinta-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.location=\'/documentatii-cerinte.php\'">Inapoi</button></p></div>';

}

}

// Pagina documentații design

else if(isset($_POST['adaugare-design-adaugare'])) {

if (move_uploaded_file($_FILES['adaugare-design-document'] ['tmp_name'], "documente/design/{$_FILES['adaugare-design-document']['name']}")) {

$q = "INSERT INTO documente(tip, data, titlu, manager_id, project_id) VALUES ('design', '" . $_POST['adaugare-design-data'] . "', '" . $_FILES['adaugare-design-document']['name'] . "', '" . $_POST['adaugare-design-manager-id'] . "', '" . $_POST['adaugare-design-project-id'] . "')";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

} else {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . $_FILES['adaugare-design-document']['error'] . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['editare-design-modificare'])) {

$q_tmp = "SELECT * FROM documente WHERE id='" . $_POST['editare-design-id'] . "'";

$res_tmp = mysqli_query($con, $q_tmp);

$rand_tmp = mysqli_fetch_array($res_tmp);

$titlu_vechi = 'documente/design/' . $rand_tmp['titlu'];

$titlu_nou = 'documente/design/' . $_POST['editare-design-titlu'];

//echo 'V:' . $titlu_vechi . ' N:' . $titlu_nou;

//die();

if (rename($titlu_vechi, $titlu_nou)) {

$q = "UPDATE documente SET titlu='" . $_POST['editare-design-titlu'] . "' WHERE id='" . $_POST['editare-design-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

} else {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> Eroare la redenumire.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['editare-design-stergere'])) {

if (unlink('documente/design/' . $_POST['editare-design-titlu'])) {

$q = "DELETE FROM documente WHERE id='" . $_POST['editare-design-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

} else {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> Eroare la stergere de pe disc.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

// Pagina documentații tehnice

else if(isset($_POST['adaugare-sectiuni-adaugare'])) {

$q = "INSERT INTO sectiuni(ordine, titlu, editor_id, project_id) VALUES ('" . $_POST['adaugare-sectiuni-ordine'] . "', '" . $_POST['adaugare-sectiuni-titlu'] . "', '" . $_POST['adaugare-sectiuni-editor-id'] . "', '" . $_POST['adaugare-sectiuni-project-id'] . "')";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['editare-sectiuni-modificare'])) {

$q = "UPDATE sectiuni SET ordine='" . $_POST['editare-sectiuni-ordine'] . "', editor_id='" . $_POST['editare-sectiuni-editor-id'] . "', titlu='" . $_POST['editare-sectiuni-titlu'] . "' WHERE id='" . $_POST['editare-sectiuni-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['editare-sectiuni-stergere'])) {

$q = "DELETE FROM sectiuni WHERE id='" . $_POST['editare-sectiuni-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.history.back();">Inapoi</button></p></div>';

}

}

else if(isset($_POST['actualizare-sectiune-actualizare'])) {

$detalii = mysqli_real_escape_string($con, $_POST['actualizare-sectiune-detalii']);

$q = "UPDATE sectiuni SET detalii='" . $detalii . "' WHERE id='" . $_POST['actualizare-sectiune-id'] . "'";

if (!mysqli_query($con, $q)) {

echo '<div class="alert alert-danger"><p class="text-center"><strong>Eroare!</strong> ' . mysqli_error($con) . '.<br><br><button class="btn btn-danger" onclick="window.history.back();">Inapoi</button></p></div>';

} else {

echo '<div class="alert alert-success"><p class="text-center"><strong>Actiune finalizata cu succes!</strong><br><br><button class="btn btn-success" onclick="window.location=\'/documentatii-tehnice.php\'">Inapoi</button></p></div>';

}

}

else {

echo "Actiune necunoscuta.";

}

require('templates/footer.php');

?>

Concluzii

Documentație Software-ul este un text scris, care însoțește programele software. Acesta, fie explică modul în care aceasta funcționează fie cum să-l folosească și poate însemna lucruri diferite pentru oameni în diferite roluri.

Nevoia de documentare a cerințelor este de obicei legat de complexitatea produsului, impactul produsului și speranța de viață a software-ului. În cazul în care software-ul este foarte complex sau dezvoltat de către mai multe persoane, cerințe pot ajuta să comunice mai bine ceea ce s-a realizat. Documentația cerințelor este descrierea a ceea ce face sau va face un anumit software. Acesta este folosit în timpul dezvoltării pentru a comunica ceea ce software-ul face sau va face.

Ideea de documentație auto-generată este atractivă pentru programatori din diverse motive. De exemplu, pentru că este extrasă din codul sursă în sine (de exemplu, prin comentarii).

Bibliografie

Conf. dr. Cristina Mȋndruță, Cursuri „Inginerie Software””

Conf. dr. Victoria Iordan, Cursuri „Elemente de web design”

http://web.info.uvt.ro/~iordan/EWD/ewd.html

http://en.wikipedia.org/wiki/Software_documentation

http://www.literateprogramming.com/documentation.pdf

https://www.princeton.edu/~achaney/tmve/wiki100k/docs/Software_documentation.html

http://www.codingthearchitecture.com/pages/book/software-architecture-document-guidelines.html

[PPT] Inginerie software http://andrei.clubcisco.ro/4mps/curs/1%20MPS%20Ingineria%20Software.pptx

https://php.net/manual/ro/index.php

Similar Posts