Software Development Life Cycle (SDLC)

1. Ce este un SDLC?

Pentru a crea un produs software de calitate se recomandă implementarea și urmarea unui proces. Din procesul testării am aflat că trebuie respectate anumite etape, iar în fiecare dintre acestea sunt descrise anumite acțiuni care trebuie făcute. Modelul SDLC ne oferă imaginea mai de ansamblu și ne arată toate etapele dezvoltării produsului software. Testarea și procesele asociate ei reprezintă doar o etapă din SDLC. Putem spune că un model SDLC ne arată fazele dezvoltării unui software, începând de la idee și până la produsul final.

De-a lungul anilor au fost dezvoltate mai multe tipuri de modele însă toate conțin următoarele etape: requirements analysis, design, implementation, testing. În funcție de strategia companiei, tipul de business și de caracteristicile produsului, se alege cel care se potrivește cel mai bine.

2. Modele de SDLC

În general, sunt împărțite în două categorii:

  • Modele secvențiale
  • Modele iterative și icrementale

2.1. Modelul secvențial

În modelele secvențiale procesul de dezvoltate este liniar, iar etapele sunt secvențiale – adică fiecare etapă începe când cea precedentă s-a încheiat.

Primul model secvențial se numește Waterfall (cascadă) și a fost introdus de Dr. Winston W. Royce în anul 1970. În acest tip de model testarea începe doar după ce faza de implementare a luat sfârșit.

Mai târziu a fost creat V-model care este o extensie a modelului Waterfall. După cum ne spune Principiul 3, testarea ar trebui sa înceapă cât mai devreme în procesul de development. În V-model se respectă acest principiu, activitățile de testare începând încă din primele faze ale dezvoltării. V-model ne mai arată că testarea nu presupune doar execuția testelor. Activități precum test planning, requirements analysis sau test design se pot desfășura în paralel cu dezvoltarea software-ului (când încă nu există software testabil).

Deci V-model este tot un model secvențial însă nu este liniar precum Waterfall. În funcție de tipul software-ului sau a proiectului, V-model se poate adapta. De asemenea, denumirea sau ordinea etapelor poate fi diferită în funcție de nevoi.

Un exemplu comun de V-model este următorul:

După cum se observă din grafic, testarea este împărțită pe nivele:

  • Unit testing (se mai numește ‘Component testing’ sau ‘Module testing’) – se testează componente/module din software care pot fi testate separat
  • Integration testing – se concentrează pe interacțiunea dintre componente/module
  • System testing – scopul este de a testa sistemul complet și se verifică dacă acesta funcționează conform requirement-urilor
  • Acceptance testing – la fel ca la nivelul anterior, se testează tot software-ul/produsul. Se evaluează dacă s-au respectat toare cerințele și dacă se poate livra clientului.

În următoarea lecție sunt descrise în detaliu aceste nivele de testare.

De obicei, modelele secvențiale se folosesc atunci când clientul știe de la început cum vrea să arate și să se comporte software-ul, cerințele sunt clare, iar pe parcursul dezvoltării schimbările din requirement-uri vor fi minore. Astfel se poate face o planificare pentru toata perioada de dezvoltare. Pentru software-ul dezvoltat se vor face puține release-uri (sau unul singur), iar fiecare release conține un set mare de funcționalități.

2.2. Modele iterative și incrementale

Development incremental înseamnă că software-ul este dezvoltat în pași mici. Cu fiecare incrementare, se dezvoltă și se testează câteva funcționalități noi. Deci fiecare increment conține un subset de funcționalități.

Development-ul iterativ se referă la faptul că tot procesul de dezvoltare este împărțit în cicluri (iterații) mai scurte de dezvoltare și care se repetă. În fiecare iterație se adaugă și se testează funcționalități noi, iar la finalul ei se livrează software funcțional. În iterația următoare se adaugă în continuare funcționalități noi sau se continuă dezvoltarea unor funcționalități din iterația precendentă și se testează. Se repetă acest procedeu până când s-a dezvoltat software-ul sau până când au fost atinse obiectivele stabilite inițial.

Aceste modele de dezvoltare se folosesc atunci când requirement-urile se schimbă des. Spre deosebire de modelele secvențiale unde se face un singur release după ce s-a dezvoltat și testat tot software-ul sau un set mare de funcționalități, în modelele iterative se face un singur release la sfârșitul fiecărei iterații.

Bazându-se pe dezvoltarea incrementală și iterativă, Agile definește niște principii despre cum ar trebui abordat procesul de dezvoltare software (Agile Manifesto) și oferă câteva metodologii prin care pot fi implementate aceste principii.

În Agile sunt binevenite schimbările târzii din requirements și echipa se adaptează ușor modificărilor. Se lucrează în iterații cât mai scurte (de la 1 săptămână până la câteva luni), iar la sfârșitul fiecărei iterații se livrează clientului software funcțonal. După aceea este recomandat ca să se colecteze feedback de la client în legătură cu ce s-a livrat pentru a determina daca direcția este bună și pentru a ajusta următoarele iterații.

Exemple de metodologii Agile:

  • Scrum:
    • O iterație se numește “sprint” și durează de obicei 1-2 săptămâni
    • Într-un sprint se livrează câteva funcționalități
    • La sfârșitul fiecărui sprint se planifică următorii pași
  • Kanban:
    • Nu e obligatoriu să se lucreze în iterații de durată prestabilită
    • Se dezvoltă câteva funcționalități, după care se face release