Luca Dan Șerbănați la bacalaureat, 1961
Luca Dan Șerbănați în primii ani ’70
Luca Dan Șerbănați la ultimul curs, aprilie 1989

Luca Dan Șerbănați

Profesor emerit la Politehnica din București

Cercetare, învățământ, industrie și memorii

RO | EN | IT
Luca Dan Șerbănați la Veneția, 1990
Luca Dan Șerbănați la New York, 2005
Luca Dan Șerbănați

Repere

  • Instituție: Universitatea POLITEHNICA din București
  • Facultate: FILS – Facultatea de Inginerie în Limbi Străine
  • Specializare: Information Engineering
  • An / semestru: anul III, semestrul II
  • Limba de predare: engleză
  • Titlu oficial: Software Development Methods
  • Titular curs: Luca Dan Șerbănați
  • Laborator / proiect: Andrei Vasilățeanu
  • Structură: 2h curs + 2h laborator / săptămână
  • Total: 56 de ore / semestru
  • Credite: 3

Locul cursului în activitatea mea didactică

Acest curs aparține etapei mele târzii de activitate didactică la FILS și exprimă într-o formă sintetică o parte importantă din experiența mea acumulată în ingineria software. El reunește, într-un cadru pedagogic accesibil studenților de licență, mai multe dintre temele care m-au preocupat de-a lungul anilor: procesul software, modelarea conceptuală, analiza și proiectarea orientată pe obiecte, rolul arhitecturii și al modelării comportamentale, precum și relația dintre cerințe, analiză, proiectare și implementare.

Deși este ancorat în paradigma orientată pe obiecte și în limbajul UML, cursul nu se reduce la o simplă prezentare de tehnici. El încearcă să evidențieze ceea ce rămâne stabil și general în metodele de dezvoltare software: nevoia de modelare, de separare a nivelurilor de abstracție, de documentare coerentă și de trecere controlată de la lumea reală la structurile implementabile.

Obiectivul cursului

Cursul urmărește explorarea metodelor și tehnicilor de dezvoltare a sistemelor software atât din perspectivă teoretică, cât și aplicată. Ideea directoare este că metodele de dezvoltare software încearcă să optimizeze procesul de producere a software-ului prin activități prescrise, instrumente și produse intermediare, cu scopul de a îmbunătăți calitatea software-ului și predictibilitatea procesului de dezvoltare.

Suportul de curs alege metoda orientată pe obiecte drept vehicul principal de expunere, folosind UML ca limbaj de comunicare al modelelor și artefactelor produse în diferitele etape ale ciclului de viață. Totuși, accentul nu cade exclusiv pe tehnică, ci pe ceea ce este persistent în toate metodele: analiza problemei, modelarea conceptuală, proiectarea, documentarea și pregătirea implementării.

Prerechizite și profilul cursului

Fișa disciplinei plasează acest curs după discipline precum Object Oriented Programming, Algorithms and Data Structures și Formal Languages & Compilers. El aparține categoriei cursurilor conceptuale: nu urmărește doar folosirea unor limbaje sau instrumente, ci formarea unei înțelegeri mai profunde asupra tehnicilor abstracte de analiză, proiectare și modelare.

Prin conținutul său, cursul pregătește studenții pentru roluri precum analist de business, analist software sau arhitect software, oferindu-le un cadru coerent pentru a înțelege cum se construiește treptat un sistem software de la problemă la soluție.

Structura cursului

1. Introducere în ingineria software

Prima parte a cursului introduce noțiunile de sistem, sistem informațional și sistem software, apoi discută specificul software-ului ca produs inginereasc, complexitatea lui, „criza software” și cauzele tipice ale eșecurilor în dezvoltare. În continuare sunt prezentate noțiunile de software engineering, proces software, metodologie de dezvoltare și relația dintre proces, notație, asigurarea calității și instrumente CASE.

Tot aici sunt analizate principalele modele de ciclu de viață: modelul în cascadă, prototiparea, dezvoltarea iterativă și incrementală, modelul spiral și apoi Unified Process, cu accent pe iterații, reducerea riscurilor, arhitectură și rolul cazurilor de utilizare.

2. UML ca limbaj al metodologiei

În continuarea părții introductive, cursul prezintă UML ca limbaj de modelare vizuală pentru specificarea, construirea și documentarea sistemelor software-intensive. Sunt introduse tipurile principale de elemente UML, relațiile dintre ele și familia diagramelor statice și dinamice.

3. Fundamentele orientării pe obiecte

A doua mare secțiune tratează baza conceptuală a orientării pe obiecte: concepte, obiecte, tipuri, clasificare, generalizare, asocieri, mapări, roluri, cardinalități, agregare și compoziție. Accentul nu cade doar pe programarea orientată pe obiecte, ci pe modelarea conceptuală a domeniului și pe relația dintre concepte, obiecte și reprezentările lor în UML.

4. Business Modelling

Cursul introduce modelarea business-ului ca etapă necesară înaintea analizei software propriu-zise. Sunt discutate scopul modelului de business, relația dintre modelarea business-ului și modelarea software, procesele de business, funcțiile, agenții, resursele și regulile de business. Sunt prezentate apoi principalele forme de documentare: business use cases, activity diagrams, business object model și business domain model.

5. Requirements Analysis

Partea dedicată analizei cerințelor tratează cerințele funcționale și nefuncționale, artefactele analizei, actorii, cazurile de utilizare, scenariile, formatele de descriere a unui use case și tehnicile de identificare a actorilor și a obiectivelor lor. Sunt prezentate atât diagramele de cazuri de utilizare, cât și documentarea textuală a fluxurilor principale și alternative.

În această parte apar și System Sequence Diagrams și contractele de operații, ca mijloc de trecere de la comportamentul observabil al sistemului la responsabilitățile interne ale obiectelor.

6. Analiza domeniului și modelul conceptual

O componentă importantă a cursului este construirea domain model-ului: identificarea claselor conceptuale, a atributelor și asocierilor relevante și delimitarea clară dintre modelul conceptual al domeniului și viitorul model software. Sunt discutate tehnici simple de identificare a claselor, relația dintre use cases și modelul domeniului și rolul diagramei de clase în analiza orientată-obiect.

7. Proiectare arhitecturală

Secțiunea de arhitectură definește arhitectura software ca ansamblu al deciziilor principale privind organizarea sistemului, elementele structurale, interfețele, conectorii și stilurile arhitecturale. Sunt introduse conceptele de componentă, conector, configurație și stil arhitectural.

Cursul trece apoi prin stiluri clasice: main program / subroutines, orientare pe obiecte, sisteme de flux de date, arhitecturi centrate pe date, arhitecturi pe straturi, maşini virtuale, client/server și variantele lor. În partea finală apar și pattern-uri cu rol arhitectural sau micro-arhitectural, precum Facade, Observer și Model-View-Controller.

8. Model comportamental și interacțiuni

Ultima parte consistentă a cursului dezvoltă modelarea comportamentală: comunicarea dintre obiecte, colaborări, interacțiuni, sequence diagrams și communication diagrams. Accentul este pus pe atribuirea responsabilităților către clase și pe trecerea de la scenarii și activități la colaborări între obiecte.

9. Responsabilități, colaborări și rafinarea proiectării

În această zonă apar tehnicile de atribuire a responsabilităților, relația dintre colaborare și interacțiune, folosirea diagramelor de secvență pentru descoperirea obiectelor și tehnica CRC Cards pentru structurarea claselor importante ale aplicației.

10. Observație asupra profilului cursului

Suportul de curs arată limpede că nu era vorba despre un simplu curs de UML. UML este folosit drept limbaj comun de exprimare, dar miza reală a disciplinei este una inginerească: trecerea controlată de la înțelegerea problemei și a business-ului la cerințe, model conceptual, arhitectură și proiectare orientată pe obiecte.

Laborator și proiect

Fișa disciplinei arată că acest curs avea o componentă practică substanțială. Laboratoarele începeau cu teme Java mai tehnice — acces la baze de date prin JDBC, programare în rețea cu sockets și Java RMI — după care treceau la o succesiune de exerciții și livrabile de analiză și proiectare: model de business, model de use case, system sequence diagrams și contracte de operații, model de domeniu, diagrame de interacțiune, statecharts, application class diagram și package diagram.

Proiectul era individual, iar temele de casă contribuiau gradual la proiectul final. Din punct de vedere pedagogic, acesta este un detaliu important: studenții nu primeau doar noțiuni teoretice, ci erau obligați să construiască pas cu pas un set coerent de modele care să ducă spre o aplicație implementabilă.

Bibliografie de bază

  • Luca Dan Șerbănați, Software Development Methods. Lecture Notes, FILS, 2009.
  • R. S. Pressman, Software Engineering: A Practitioner’s Approach, 7th edition.
  • L. D. Șerbănați, Integrating Tools for Software Development, Yourdon Press / Prentice Hall, 1992.
  • G. Booch, J. Rumbaugh, I. Jacobson, The Unified Modeling Language. User Guide.
  • M. Fowler, UML Distilled.
  • C. Larman, Applying UML and Patterns.

Semnificația cursului

Privit retrospectiv, acest curs este reprezentativ pentru felul în care am înțeles să predau în ultimii ani: nu ca simplă transmitere de tehnologii trecătoare, ci ca formare a unei gândiri inginerești despre software. El combină elemente clasice de software engineering cu tehnici UML și cu o viziune mai largă, apropiată de systems engineering, asupra procesului de dezvoltare.

În fond, Software Development Methods nu este doar un curs despre diagrame sau despre orientarea pe obiecte. Este un curs despre ordinea care trebuie introdusă într-un proces complex, despre trecerea controlată de la realitate la model și de la model la soluția software.

Resurse

În contextul celorlalte cursuri