Software Methodologies
Curs predat în limba engleză, prezentat aici în română pentru a fi integrat în ansamblul activității mele didactice. El este consacrat metodologiilor de dezvoltare software și urmărește să ofere o privire comparativă și inginerească asupra principalelor moduri de organizare a dezvoltării sistemelor software.
Repere
- Instituție: Universitatea POLITEHNICA din București
- Facultate: FILS – Facultatea de Inginerie în Limbi Străine
- Program: Master în Software Engineering
- Semestru: semestrul I
- Limba de predare: engleză
- Titlu oficial: Software Methodologies
- Titular curs: Luca Dan Șerbănați
- Titular aplicații: Luca Dan Șerbănați
- Structură: 3 ore curs + 2 ore aplicații pe săptămână
- Credite: 6
- Precondiții: Programming Languages, Object-Oriented Programming, Software Development Methods
Locul cursului în activitatea mea didactică
Acest curs aparține unei etape didactice târzii, în care interesul meu nu mai era îndreptat doar spre tehnici particulare de analiză, proiectare sau programare, ci spre înțelegerea comparativă a marilor familii de metodologii software. El presupune un student deja format în programare și în ingineria software de bază și încearcă să răspundă unei întrebări mai generale: cum organizăm și cum alegem o metodă de dezvoltare potrivită pentru un anumit tip de sistem software?
În acest sens, cursul are un caracter de sinteză. El leagă procesul software de modele, notații, criterii de calitate, cerințe, arhitecturi și discipline de proiectare, mutând accentul de la simpla utilizare a unei tehnici la înțelegerea spațiului metodologic în ansamblu.
Obiectivul cursului
Ideea de fond a cursului este că dezvoltarea practică a software-ului cere metode capabile să facă legătura dintre problema de rezolvat și sistemul software care trebuie construit. Cursul prezintă metodologiile software ca ansambluri coerente de procese, modele, reguli, produse intermediare și instrumente care ghidează inginerul software de la definirea cerințelor până la proiectare și implementare.
El urmărește două obiective complementare. Pe de o parte, să ofere o vedere largă asupra principalelor metodologii și paradigme de dezvoltare; pe de altă parte, să-i dea studentului criterii de comparație între abordări diferite, inclusiv din perspectiva complexității, trasabilității, calității și reutilizării.
Ideile directoare ale cursului
Suportul începe printr-o introducere în software engineering: natura software-ului, criza software, complexitatea proiectelor, procesul software și rolul metodelor și instrumentelor în disciplinarea dezvoltării. O parte importantă este dedicată procesului software, văzut ca ansamblu de activități, practici, transformări și produse asociate, precum și maturității procesului, inclusiv prin modelul CMMI.
Cursul insistă asupra faptului că o metodologie de dezvoltare are două componente complementare: un proces standard și o notație standard. În jurul acestei idei sunt organizate comparațiile dintre metodologiile structurate, Information Engineering și metodologiile orientate pe obiecte, precum și discuția despre modele de proces iterative și dezvoltare bazată pe componente.
Structura cursului
1. Software Engineering și procesul software
Prima parte introduce noțiunile fundamentale de software engineering: definiția software-ului, tipurile de aplicații software, complexitatea proiectelor, criza software, procesul software, disciplinele de dezvoltare, product assurance, managementul proiectelor și maturitatea procesului. Sunt prezentate și principalele modele de proces: waterfall, prototyping, RAD, incremental, spiral, WINWIN spiral, concurrent development, iterative development și component-based development.
2. Systems Engineering Methodologies
A doua parte lărgește perspectiva de la software la sistem. Sunt discutate noțiunea de sistem, principiile systems engineering, raportul dintre sistem și mediu, modelarea sistemelor, partiționarea lor și legătura dintre cerințe și arhitectură. Apar aici concepte precum system hierarchy, black-box / white-box view, information model vs. physical model, architecture flow context diagram și șabloane de partiționare a sistemelor.
3. Structured Methodologies for Software Development
O parte consistentă este consacrată metodologiilor structurate. Sunt discutate ciclul de viață structurat, fazele sale, activitățile de analiză și proiectare, precum și instrumentele clasice de modelare: decomposition diagrams, data flow diagrams, entity-relationship diagrams, data dictionary, state transition diagrams, process specifications, PDL, HIPO, IPO și structure charts. Această secțiune are și o valoare istorică și conceptuală, pentru că arată cum s-a încercat disciplinarea dezvoltării software într-o paradigmă centrată pe funcții.
4. Software Requirements Analysis
Cursul tratează apoi analiza cerințelor software ca punte între systems engineering și software design. Sunt discutate modelele logice, principiile operaționale ale analizei, instrumentele de analiză structurată, raportul dintre system requirements și software requirements, structura unui Software Requirements Specification și modul în care se construiește modelul conceptual al software-ului.
5. Software Design
Urmează secțiunea de proiectare software propriu-zisă, unde accentul cade pe trecerea de la modelul de analiză la modelul de design. Sunt discutate componentele proiectării: data design, architectural design, interface design și component-level design, precum și criteriile de calitate ale unui design bun: modularitate, separarea preocupărilor, trasabilitate și adecvarea structurilor rezultate.
6. Metodologii orientate pe obiecte: Unified Process și UML
Ultima parte a cursului se mută spre metodologia orientată pe obiecte. Sunt prezentate conceptele de bază ale orientării pe obiecte, mesajele dintre obiecte, apoi Unified Process ca proces extensibil, use-case driven, architecture-centric, risk-focused, iterative și incremental. Cursul se încheie cu UML, văzut ca notație grafică pentru vizualizarea, specificarea, construirea și documentarea artefactelor unui sistem software.
Semnificația cursului
Privit retrospectiv, acest curs exprimă foarte bine una dintre convingerile constante ale activității mele didactice: software-ul nu se construiește serios fără metodă, dar nici fără spirit critic față de metodă. Nu există o soluție unică, iar valoarea formării universitare constă tocmai în a-i învăța pe studenți să înțeleagă diferențele dintre paradigme, ipotezele lor, avantajele lor și limitele lor.
Din acest motiv, Software Methodologies nu este doar un curs despre tehnici și nici doar o istorie a metodelor. El este, mai curând, un curs despre discernământ metodologic în ingineria software și despre raportul dintre cerințe, modelare, proces, arhitectură și implementare.





