Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού Παναγιώτης Σφέτσος, PhD

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Προγραμματισμός Ι (αποφύγετέ τον!) 3) Διακοπτόμενος βρόχος: (αποφύγετέ τον!) float energy;......while(TRUE){drink_water(); if(energy
Advertisements

Προγραμματισμός Ι Προτάσεις ελέγχου ροής Ο πιο συνηθισμένος τρόπος εκτέλεσης είναι ο ακολουθιακός: δύο ή περισσότερες προτάσεις βρίσκονται διατεταγμένες.
Μεθοδολογίες Προγραμματισμού ΙΙ
Μεθοδολογίες Προγραμματισμού ΙΙ
Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού Παναγιώτης Σφέτσος, PhD
Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού - ECLIPSE JUNIT – TDD TFD + Refactoring Παναγιώτης Σφέτσος, PhD
Μηχανική Λογισμικού ΙΙ
ΗΥ-150 Προγραμματισμός Εντολές Ελέγχου Ροής.
Μεθοδολογίες Προγραμματισμού ΙΙ JUNIT - Test First Design
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Προγραμματισμός ΙΙ Διάλεξη #7: Περισσότερες Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Μεθοδολογίες Προγραμματισμού ΙΙ Σχεδιαστικά Πρότυπα (1) Παναγιώτης Σφέτσος, PhD
Μεθοδολογίες Προγραμματισμού ΙΙ
ΕΛΕΓΧΟΣ ΡΟΗΣ ΜΑΘΗΜΑ 4. ΑΚΟΛΟΥΘΙΑΚΗ ΕΚΤΕΛΕΣΗ ΠΡΟΤΑΣΕΩΝ ΠΡΟΤΑΣΗ Α ΠΡΟΤΑΣΗ Β ΠΡΟΤΑΣΗ Γ ………………. ΠΡΟΤΑΣΗ n ΠΡΟΤΑΣΗ Α ΠΡΟΤΑΣΗ Β ΠΡΟΤΑΣΗ Γ ………………. ΠΡΟΤΑΣΗ n.
ΕΠΑΝΑΛΗΨΗΕΠΑΝΑΛΗΨΗ ΠΡΟΓΡΑΜΜΑΤΑ. ΠΡΟΓΡΑΜΜΑ 1 ΕΞΗΓΗΣΤΕ ΤΙ ΕΞΟΔΟ ΠΑΡΑΓΕΙ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ #include int main() { char ch; int i; float fl; printf("dose.
Υποθετικός τελεστής Ο υποθετικός τελεστής (?:) αποτελείται από δύο σύμβολα. Ανήκει στην κατηγορία των τελεστών που αποτελούνται από συνδυασμό συμβόλων.
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Είσοδος & Έξοδος στη C++ Ι
Μεθοδολογίες Προγραμματισμού ΙΙ Αναδόμηση Λογισμικού - 2 Software Refactoring - Εφαρμογές Παναγιώτης Σφέτσος, PhD
2009ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης1 ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Κατασκευή Λογισμικού (2/2) Μανόλης.
Οσμές στη Σχεδίαση του Λογισμικού (Code Smells) Πρόγραμμα Μεταπτυχιακών Σπουδών στην Εφαρμοσμένη Πληροφορική.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 12: Παραγωγή Ενδιάμεσου Κώδικα (Σημασιολογικές ρουτίνες μετάφρασης-Μέρος Β) Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής.
Θεωρία Υπολογισμού Χρονική Πολυπλοκότητα και Μοντέλα.
ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Επανάληψη.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
Δρ. Πολύκαρπος Ευριπίδου Η πρωτη βοηθεια είναι το συνολο των ενεργειων που θα παρασχεθουν σε ένα τραυματια η έναν ασθενη πριν την επεμβαση του.
ΜΠΕΜΠΕΤΣΟΣ ΕΥΑΓΓΕΛΟΣ Ph.D.. ΕΡΕΥΝΕΣ ΦΥΣΙΟΛΟΓΙΚΕΣ Ή ΠΑΘΟΓΕΝΕΙΣ ΜΕΘΟΔΟΥΣ ΑΠΩΛΕΙΑΣ ΒΑΡΟΥΣ: Α) ΑΥΤΟΑΠΟΚΑΛΟΥΜΕΝΟΣ ΕΜΕΤΟΣ Β) ΧΡΗΣΗ ΔΙΟΥΡΗΤΙΚΩΝ ΚΑΙ ΚΑΘΑΡΤΙΚΩΝ.
1 Εισαγωγή στην επιστήμη των υπολογιστών Υπολογιστές και Δεδομένα Κεφάλαιο 4ο Πράξεις με μπιτ.
Χρηματοοικονομικές Αγορές*
Η αξιολόγηση της ψυχικής υγείας 1/2
Τεχνολογία και Προγραμματισμός Υπολογιστών
Εισαγωγή στον Προγ/μό Η/Υ
Αντικειμενοστραφής Προγραμματισμός Ι
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Software Engineering for Web Applications
Π Ι Ν Α Κ Ε Σ (arrays) ΤΑΞΙΝΟΜΗΣΗ
ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ
Καθορίζουν το είδος των υπό δημιουργία περιπτώσεων ελέγχου.
Η ανάγκη χρήσης μεταβλητών
Η θεωρητική βάση της εργασίας με την οικογένεια 1/2
Εισαγωγή στον Προγ/μό Υπολογιστών
Δομές διακλάδωσης, επαναλήψεις, μέθοδοι
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
Εισαγωγή στον Προγ/μό Η/Υ
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης
ΤΟ ΚΥΚΛΟΦΟΡΙΚΟ ΣΥΣΤΗΜΑ ΤΟΥ ΑΝΘΡΩΠΟΥ
Βιοκινητική αξιολόγηση αθλητικών ικανοτήτων
Οργάνωση & Διοίκηση Αθλητισμού
ΑΝΑΝΕΩΣΙΜΕΣ ΠΗΓΕΣ ΕΝΕΡΓΕΙΑΣ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Γλώσσα Προγραμματισμού V PHP
Σχολείο Ανοιχτού Εκπαιδευτικού Περιεχομένου
Για να γίνει το γεύμα σας πιο ισορροπημένο...
Σώζοντας το νερό για ένα καλύτερο μέλλον!
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Νοσηλευτική φροντίδα τραυματία
Μανομενίδης Γεώργιος Νοσηλευτής PhD
Λιθογραφία – Όφσετ (Θ) Ενότητα 9: Καινοτομίες στις τεχνολογίες όφσετ
ΤΟ ΚΥΚΛΟΦΟΡΙΚΟ ΣΥΣΤΗΜΑ ΤΟΥ ΑΝΘΡΩΠΟΥ
Δομές ροής προγράμματος
Δ. ΚΙΟΥΚΙΑΣ, «ΦΟΡΜΕΣ ΔΙΑΚΥΒΕΡΝΗΣΗΣ ΣΤΗΝ ΕΠΟΧΗ ΤΗΣ ΠΑΓΚΟΣΜΙΟΠΟΙΗΣΗΣ»
Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου
Ομαδοποίηση αντικειμένων
Δ. ΚΙΟΥΚΙΑΣ, «ΦΟΡΜΕΣ ΔΙΑΚΥΒΕΡΝΗΣΗΣ ΣΤΗΝ ΕΠΟΧΗ ΤΗΣ ΠΑΓΚΟΣΜΙΟΠΟΙΗΣΗΣ»
Μεταγράφημα παρουσίασης:

Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού Παναγιώτης Σφέτσος, PhD

if ( V == 0 && V1 == 0 || C() ) {…. ……. } entoli;... entoli; CC = 3, (3 – συνθήκες) if ( V == 0 && V1 == 0 || C() ) {…. ……. } entoli;... entoli; CC = 3, (3 – συνθήκες) Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 2 Cyclomatic Complexity (CC) :: Κυκλωματική Πολυπλοκότητα (1/2) entoli; ……… switch( V) case 1:.... case 2:.... default: entoli;... switch( someVariable ) case 1:.... case 2:.... case 3:.... case 4: entoli; CC = 2, (2 – cases) CC = 4, (4 – cases)

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 3 Cyclomatic Complexity (CC) public void one(){ if(true) { while(false) { two(); } } else { for(int i=0;i<10;i++) { two(); } :: Κυκλωματική Πολυπλοκότητα (2/3) Στη μέθοδο υπάρχει μια if – εντολή που περιλαμβάνει μια while, ενώ το τμήμα else περιλαμβάνει μια for – εντολή. Ποια θα είναι η CC;

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 4 Cyclomatic Complexity (CC) :: Κυκλωματική Πολυπλοκότητα (3/3) CC = 8 – 6 + 2(1) = 4 CC = V(G) = e – n +2p Στη μέθοδο υπάρχουν 4-διακριτά μονοπάτια. public void one(){ if(true) { while(false) {two();} } else { for(int i=0;i<10;i++) {two();} }}

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 5 Weighted Methods per Class (WMC) :: Σταθμισμένες Μέθοδοι ανά Κλάση (1/2)  Η WMPC1 αθροίζει τις τιμές της CC σε όλες τις μεθόδους της κλάσης. Όπου: n, ο αριθμός των μεθόδων ανά κλάση και ci, η πολυπλοκότητα κάθε μεθόδου  Η WMPC2 αθροίζει το πλήθος των μεθόδων και το πλήθος των παραμέτρων.

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 6 Weighted Methods per Class (WMC) :: Σταθμισμένες Μέθοδοι ανά Κλάση (2/2) public class WMPC { public void one(){ if(true) { two(); } else { } if(true && !false){ } } public void two(){ if(true){} } public void three(int i){} } cc mc <= 1 - μέθοδος <= 1 – μέθοδος και 1-παράμετρος

Παράδειγμα - 1: Mία κλάση έχει τις μεθόδους m1, m2, m3, και m4 και τα πεδία f1, f2, f3, και f4. Τα πεδία που χρησιμοποιεί κάθε μέθοδος είναι: m1f1, f2 m2f3 m3f2, f4 m4f1 Υπολογίζουμε του όρους P και Q. Παίρνουμε όλα τα ζεύγη των μεθόδων και εξετάζουμε εάν έχουν κοινά πεδία. Το P = 4, επειδή τα ζεύγη m1-m2, m2-m3, m2-m4, m3-m4 δεν έχουν κάποιο κοινό πεδίο. Το Q = 2, επειδή τα ζεύγη m1-m3 και m1-m4 χρησιμοποιούν κοινά πεδία. Άρα η LCOM1 = 2. Παράδειγμα - 1: Mία κλάση έχει τις μεθόδους m1, m2, m3, και m4 και τα πεδία f1, f2, f3, και f4. Τα πεδία που χρησιμοποιεί κάθε μέθοδος είναι: m1f1, f2 m2f3 m3f2, f4 m4f1 Υπολογίζουμε του όρους P και Q. Παίρνουμε όλα τα ζεύγη των μεθόδων και εξετάζουμε εάν έχουν κοινά πεδία. Το P = 4, επειδή τα ζεύγη m1-m2, m2-m3, m2-m4, m3-m4 δεν έχουν κάποιο κοινό πεδίο. Το Q = 2, επειδή τα ζεύγη m1-m3 και m1-m4 χρησιμοποιούν κοινά πεδία. Άρα η LCOM1 = 2. Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 7 Lack of Cohesion of Methods (1/5)

Παράδειγμα - 2: Έστω μία κλάση με τις μεθόδους: M1, M2, M3 και τα πεδία που περιέχουν αντίστοιχα είναι: I1 = {a, b, c, d, e} I2 = {a, b, e} I3 = {x, y, z} τότε: P = {(I1, I3), (I2, I3)} Q = {(I1, I2)} Έτσι η LCOM = 1 Παράδειγμα - 2: Έστω μία κλάση με τις μεθόδους: M1, M2, M3 και τα πεδία που περιέχουν αντίστοιχα είναι: I1 = {a, b, c, d, e} I2 = {a, b, e} I3 = {x, y, z} τότε: P = {(I1, I3), (I2, I3)} Q = {(I1, I2)} Έτσι η LCOM = 1 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 8 Lack of Cohesion of Methods (2/5)

Παράδειγμα υπολογισμού LCOM: Επτά ζευγάρια: (m1, m3), (m1, m4), (m2, m4), (m5, m1), (m5, m2), (m5, m3), (m5, m4), δεν έχουν κοινές μεταβλητές. Άρα LCOM = 10 – 3 = 7. Παράδειγμα υπολογισμού LCOM: Επτά ζευγάρια: (m1, m3), (m1, m4), (m2, m4), (m5, m1), (m5, m2), (m5, m3), (m5, m4), δεν έχουν κοινές μεταβλητές. Άρα LCOM = 10 – 3 = 7. Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 9 Lack of Cohesion of Methods (3/5) Fig. mi- μέθοδοι που έχουν πρόσβαση σε aj μεταβλητές

Παράδειγμα: public PersonDetails { Το LCOM; private String firstname; private String surname; private String street; private String city; public PersonDetails() {} //I1 = { } public setName(String f, String s) { //I2 = { firstname, surname } firstname = f; surname = s; } public setAddress(String st, String c) { // I3 = { street, city } street = st; city = c; } public void printAddress() { //I4 = { street, city } System.out.println( street); System.out.println( city); } public void printName() { // I5 = { firstname, surname } System.out.println( firstname + " " + surname); }} Παράδειγμα: public PersonDetails { Το LCOM; private String firstname; private String surname; private String street; private String city; public PersonDetails() {} //I1 = { } public setName(String f, String s) { //I2 = { firstname, surname } firstname = f; surname = s; } public setAddress(String st, String c) { // I3 = { street, city } street = st; city = c; } public void printAddress() { //I4 = { street, city } System.out.println( street); System.out.println( city); } public void printName() { // I5 = { firstname, surname } System.out.println( firstname + " " + surname); }} Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 10 Lack of Cohesion of Methods (4/5)

Pair (mi, mj) Ii ∩ Ij PersonDetails, setName0 PersonDetails, setAddress 0 PersonDetails, printAddress0 PersonDetails, printName 0 setName, setAddress 0 setName, printAddress 0 setName, printName {_firstname, _surname} setAddress, printAddress {_street, _city} setAddress, printName 0 printAddress, printName 0 LCOM 8 Pair (mi, mj) Ii ∩ Ij PersonDetails, setName0 PersonDetails, setAddress 0 PersonDetails, printAddress0 PersonDetails, printName 0 setName, setAddress 0 setName, printAddress 0 setName, printName {_firstname, _surname} setAddress, printAddress {_street, _city} setAddress, printName 0 printAddress, printName 0 LCOM 8 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 11 Lack of Cohesion of Methods (5/5)