Asigurarea Calitatii Software-ului


Good design and programming is not learned by generalities, but by seeing how significant programs can be made clean, easy to read, easy to maintain and modify, human-engineered, efficient, and reliable, by the application of good design and programming practices. Careful study and imitation of good designs and programs significantly improves development skills.

Kernighan & Plauger.









¨      The lecture notes for lecture 8 was added to the site!

¨      The suggested reading for lecture 7 was updated!

¨      The exam dates were set as follows:

o        24.05 (09:00 am)  and 31.05 (08:00 am)

¨      The exam will be oral

¨      The meeting place for the exam is in the lobby of the 5th floor of the main building of our faculty!

¨      The meeting for delivering and assessing your project assignments will take place in my office (ASPC, romm P11) on 26.05 beginning with 15:00.


¨      The site was updated! Lectures 5,6,7 were added!

¨      Some small mistakes in the slides of Lecture 4 were corrected.

¨      ATTENTION: The  "Suggested Reading" section for Lecture 7 will be updated in a couple of days! Therefore, please revisit the site after Tuesday (29.04)!


¨      The site was updated! Modifications occurred in the slides from the last lecture. So, please download them again!


¨      Până în momentul de faţă nu s-au înscris decât 13 studenţi la proiect (vezi situaţia aici). Celor care nu se vor înscrie până în data de luni 31.03, ora 18:30, contactându-mă personal, nu le voi putea încheia situaţia la laborator/proiect, şi în consecinţă nu vor putea să îşi finalizeze în vară studiile de „master”!


¨      The handouts for Lecture 3 were added to the site.


¨      The slides and suggested reading for the second lecture were added!

¨      Teams for the project assignment were updated!


¨      The final version of the slides for the first lecture is now available!


¨      The site was updated again. Some small mistakes were corrected.

¨      The lecture slides were also updated (but are still not final)


¨      Beginning with today the site is online!

¨      The next lecture will take place tomorrow, 06.03 at 17:00 (A314)

¨      Lab/Project meetings take place Mondays at 18:00 (B528b)

¨      Please read the information about the project assignment on the bottom part of this page!




 General Course Information







Thursday,   17:00 – 19:00


Radu Marinescu

Project Session

Monday,  18:00 – 20:00





Lecture Handouts



Suggested Reading

Lecture 1:

Introduction to Reengineering

(ppt) (pdf)

S. Demeyer, S.Ducasse, O.Nierstrasz – Object-Oriented Reengineering Patterns, Chapter 1 (pg. 1-14)

E.J. Chikofsky, J.H. Cross – Reverse Engineering and Design Recovery: A Taxonomy

FAMOOS GroupFAMOOS Object-Oriented Reengineering Handbook, Chapter 1


M.M Lehman Laws of Software Evolution Revisited (Section 1 and 2)

Lecture 2:

Reverse Engineering

(ppt) (pdf)

S. Demeyer, S.Ducasse, O.Nierstrasz – Object-Oriented Reengineering Patterns, Chapter 2-4 (pg. 1-14)

Lecture 3:

Reverse Engineering (contd.)

Detailed Model Capture

 (ppt) (pdf)

S. Demeyer, S.Ducasse, O.Nierstrasz – Object-Oriented Reengineering Patterns, Chapter 2-4 (pg. 1-14)

Lecture 4:

Design Extraction

(ppt) (pdf)

M. Fowler – UML Distilled, Chapter 4 “Class Diagrams: The Essentials (pg. 53-69)

Lecture 5:

Principles of Object-Oriented Design (Part I)

(ppt) (pdf)

R.C. MartinThe Open Closed Principle, The Liskov Substitution Principle,  The Dependency Inversion Principle,

R.C. Martin – Design Principles and Design Patterns

E. Gamma, R. Helm, R. Johnson and J. VlissidesDesign Patterns (Section 1.6, pg. 11-24)

Lecture 6:

Principles of Object-Oriented Design (Part II)

(ppt) (pdf)

R.C. MartinThe Interface Segregation Principle, Stability, Granularity

R.C. Martin – Design Principles and Design Patterns

K.J. Lieberherr, I.M.HollandAssuring Good Style for Object-Oriented Programs


Lecture 7:

Detection of Design Problems


M. Fowler – Refactorings, Chapter 3 “Bad Smells in Code" (pg. 75-87)

R. Marinescu Measurement and Quality in Object-Oriented Design

o       Section 2.1 and 2.2 (pg. 7 - 18)

o        Section 4.1 (pg. 39 -41) and Section  4.3  (pg. 53 - 61)

o        Section 5.1 - 5.3 (pg. 63- 73)

o        Section 6.1- 6.2 (pg. 87 - 96 )

Lecture 8:

Quality-Driven Code Restructuring

(ppt) (pdf)

M. Fowler – Refactorings, Chapter 10  “Making Method Calls Simpler"

o        Rename Method (pg. 273-274)


S. Demeyer, S.Ducasse, O.Nierstrasz – Object-Oriented Reengineering Patterns, Chapter 10

o        Forces and Overview (pg. 215 -217)

o        Pattern 10.1(pg. 217 - 224)

o        Pattern 10.2 (pg. 225 - 233)

o        Pattern 10.3 (pg. 234 - 236)

o        Pattern 10.4 (pg. 237 - 239)





Project Assignments



The goal of this project assignment is to confront you with existing object-oriented cod that was poorly developed/designed in the past; this might be either your own, old, beloved programs that you have written in the past or some strange code that other people have written before you joined the company you are working with and that you unfortunately have to maintain.


In this context the goal of this project is to give you a hands-on experience on methods, techniques and tools that help you understand and improve it.




In order to participate in this project please follow these steps:

  1. Group yourself in 2-member teams.
  2. Think about one of your older projects about which you know that it was ill-designed and which needs a new, improved design. Projects should be in the size of 1 – 10 KLOC and should be developed in C++ or Java.

If you cannot think of anything like that, send me an email and I will assign you a project.

  1. Send me an email ( and tell me about the team composition and you project choice.
  2. Please attend the next project meeting for more details ;-)




The up-to-date situation of the teams can be found here.





Classified Resources




Design Principles

A.J. RielObject-Oriented Design Heuristics (Addison-Wesley, 1996)

R.C. MartinThe Open Closed Principle, The Liskov Substitution Principle, The Interface Segregation Principle,  The Dependency Inversion Principle, Stability, Granularity

R. Johnson Designing Reusable Classes (JOOP, 1988)

Design Patterns

E. Gamma, R. Helm, R. Johnson and J. VlissidesDesign Patterns (Addison-Wesley, 1995)    .

F. Buschmann, – Pattern-Oriented Software Architecture. A System of Patterns (John Wiley & Son, 1996)

The Home Page of Patterns   

Object-Oriented Design

B. MeyerObject-Oriented Software Construction (Prentice Hall, 2000)

G. Booch – Object-Oriented Analysis and Design with Applications (2nd Edition) (Addison-Wesley, 1994)

P.Coad, E. YourdonObject-Oriented Design (Yourdon Press, 1990)