Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Μηχανική Λογισμικού ΙΙ Αντίστροφη Μηχανική Reverse Engineering Παναγιώτης Σφέτσος, PhD

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Μηχανική Λογισμικού ΙΙ Αντίστροφη Μηχανική Reverse Engineering Παναγιώτης Σφέτσος, PhD"— Μεταγράφημα παρουσίασης:

1 Μηχανική Λογισμικού ΙΙ Αντίστροφη Μηχανική Reverse Engineering Παναγιώτης Σφέτσος, PhD

2 Γ ε ν ι κ ά - 1 2Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Αντίστροφη Μηχανική: τεχνολογικών αρχών Είναι η διαδικασία εύρεσης των τεχνολογικών αρχών που διέπουν μία συσκευή, ένα αντικείμενο ή ένα σύστημα λογισμικού, μέσα από: 1) την ανάλυση της δομής και της λειτουργίας του συστήματος 2) τον διαχωρισμό των τμημάτων του συστήματος 3) την ανακατασκευή του συστήματος, χωρίς αντιγραφή Κίνητρα – Αιτίες – Συμπτώματα Ταυτόχρονη ανάπτυξη του από πολλούς προγραμματιστές και ύπαρξη πολλαπλών εκδόσεων (multi-persons, multi- versions). Ασυνέπεια πολλαπλών εκδόσεων (multi-persons, multi- versions). Ασυνέπεια μεταξύ τεκμηρίωσης ενός έργου λογισμικού και του κώδικα. Αιτία η ικανοποίηση νέων απαιτήσεων (γρήγορος κώδικας) χωρίς την ενημέρωση των υπολοίπων εγγράφων ή διαγραμμάτων που αντιστοιχούν στις διάφορες φάσεις ανάπτυξης.

3 Γ ε ν ι κ ά - 1 3Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Χαμένη τεκμηρίωση Ανάλυση προϊόντος Ανάλυση προϊόντος, πως δουλεύει; Παρακολούθηση ασφάλειας συστημάτων Διαλειτουργικότητα Διαλειτουργικότητα (Interoperability). Όταν ο χρήστης έχει μικρή ή καθόλου γνώση των ιδιαίτερων χαρακτηριστικών του συστήματος που εργάζεται. Ψηφιακή ενημέρωση / διόρθωση συστήματος Διαγραφή απαγόρευσης αντιγραφής (cracking) Εύρεση σχεδιαστικής δομής συστήματος

4 Γ ε ν ι κ ά - 2 4Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Εκμάθηση ή Ακαδημαϊκοί λόγοι Βιομηχανική / κρατική κατασκοπεία Αποφυγή λαθών που έκαναν κατασκευαστές συστημάτων Περιέργεια : : : :

5 Αντίστροφη Μηχανική Λογισμικού 5Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Μπορεί να χρησιμοποιηθεί επίσης για την: - Τροποποίηση του Λογισμικού - Αλλαγή περιβάλλοντος – πλατφόρμας χρήσης (Y2K,, €, ηλεκτρονικό εμπόριο, κλπ.) ηλεκτρονικό εμπόριο, κλπ.) - Σχεδίαση και υλοποίηση στην παραδοσιακή (κανονική) Μηχανική Λογισμικού (π.χ. Debugging) Μηχανική Λογισμικού (π.χ. Debugging) - Κατανόηση του Λογισμικού - Οπτική αναπαράσταση του Λογισμικού - Επαναχρησιμοποίηση (re-use) του κώδικα

6 Αντίστροφη Μηχανική Δεδομένων 6Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ - Εστιάζει στα δεδομένα και τις σχέσεις μεταξύ των δεδομένων δεδομένων - Έλεγχος των δομών των δεδομένων μέσα στα προγράμματα και στις Βάσεις των Δεδομένων. Για παράδειγμα τις και στις Βάσεις των Δεδομένων. Για παράδειγμα τις Σχεσιακές Βάσεις Δεδομένων (RDB’s). Σχεσιακές Βάσεις Δεδομένων (RDB’s). Ιεραρχικά αρχεία δεδομένων RDB’s Μοντέλο-ΟΟ

7 Αντίστροφη Μηχανική Λογισμικού 7Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Διαφορετικές όψεις: Chikofsky και Cross: “είναι η διαδικασία ανάλυσης ενός συστήματος για την δημιουργία μιας αναπαράστασης / αναπαραγωγής του σε υψηλότερο την δημιουργία μιας αναπαράστασης / αναπαραγωγής του σε υψηλότερο επίπεδο αφαίρεσης” επίπεδο αφαίρεσης” Επιστροφή στην αρχή του κύκλου ανάπτυξης ενός συστήματος Requirements Analysis Design Implementatio n Forward engineering Reverse engineering

8 Αντίστροφη Μηχανική Λογισμικού 8Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

9 9 Απεικονίσεις UML και σύμβολα Java visibility UML Notation public+ private- Protected# package~

10 10Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Είδη ορατότητας - Είδη σχέσεων Είδη ορατότητας Είδη σχέσεων μεταξύ κλάσεων

11 11Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ περισσότεροι συμβολισμοί.. 1)Η τιμή μεταβλητών ή επιστρεφόμενη τιμή από μεθόδους, γράφεται μετά από (:), π.χ. carPrice : double = 0.0 employeeID : int getDepartment() : String 2) Σε static μεταβλητές ή λειτουργίες οι τιμές υπογραμμίζονται, π.χ. department : String = “Grammateia” getDepartment() : String 3) Abstract classes και interfaces, γράφονται με italics

12 12Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Συσχέτιση – Association (1/4) Απεικονίζει την στατική (μη δυναμική) σχέση μεταξύ δύο κλάσεων και με πολλαπλότητα. Η πολλαπλότητα ορίζει πόσες περιπτώσεις συσχετίζονται σε μια δεδομένη στιγμή: 0..1 Καμία ή μία μόνο περίπτωση Μια θέση αυτοκινήτου μπορεί να έχει ένα ή κανένα επιβάτη 1 Ακριβώς μία περίπτωση Μια παραγγελία έχει ένα πελάτη 0..* or * Μηδέν ή περισσότερες περιπτώσεις.. Μια τάξη μπορεί να έχει μηδέν ή πολλούς φοιτητές 1..* Μια ή περισσότερες περιπτώσεις (τουλάχιστον μια) Μια πτήση μπορεί να έχει ένα ή περισσότερους επιβάτες

13 13Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Συσχέτιση – Association (2/4) abstract class Employee { String name; protected int payType; protected int b; protected int h; Employee(String s, int b_, int h_, int p) {name=s; payType=p; b=b_; h=h_;} public String getName() {return name;} public String getPayType() { String pType; if (payType==0) pType="Salary"; else pType="ByHour"; return pType; } abstract String getEmpType(); abstract void calcSalary(); } class Company { Employee emp[]= new Employee[4]; public void setEmployee(Employee e,int a) {emp[a]=e;} public void printAll() { for (int i=0;i<4;i++) { System.out.println("Name = "+ emp[i].getName()); System.out.println("Type Of Employment = "+ emp[i].getEmpType()); System.out.println("Type Of Payment = "+ emp[i].getPayType()); System.out.println(); emp[i].calcSalary(); } } } Πολλαπλότητα

14 14Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Συσχέτιση – Association (3/4) Συσχέτιση μονής κατεύθυνσης (unidirectional association) public class Customer { private String name; private String address; private String contactNumber; } public class Car { private String modelNumber; private Customer owner; }

15 15Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Συσχέτιση – Association (4/4) Συσχέτιση διπλής κατεύθυνσης (bidirectional association) public class Customer { private String name; private String address; private String contactNumber; private Car car; } public class Car { private String modelNumber; private Customer owner; }

16 16Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Γενίκευση – Κληρονομικότητα (1/3) Απεικονίζει την κληρονομικότητα (στη java την λέξη κλειδί extends) Ακολουθεί την αρχή της Υποκατάστασης της Liskov (Liskov Substitution Principle), όπου η κλάση παιδί (υποκλάση) μπορεί να αντικαταστήσει την κλάση μαμά (υπερκλάση). Έτσι βοηθά στο να ακολουθείται και η αρχή της Ανοικτής-Κλειστής Σχεδίασης (Open-Closed Principle), δηλ ανοικτή για επεκτάσεις – κλειστή για τροποποιήσεις. abstract class Employee { protected String name; protected int payType; protected int b; protected int h; Employee(String s, int b_, int h_, int p) {name=s; payType=p; b=b_; h=h_;} public String getName() {return name;}

17 17Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Γενίκευση – Κληρονομικότητα (2/3) public String getPayType() { String pType; if (payType==0) pType="Salary"; else pType="ByHour"; return pType; } abstract String getEmpType(); abstract void calcSalary(); } class Administrator extends Employee { Administrator(String s, int b, int h, int p) {super(s,b,h,p);} public String getEmpType() {return "Administrator";} public void calcSalary() { int s=0; if (payType==0) s=1200+b; else s=(h*12); System.out.println(" Sarary = " + s); }}

18 18Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Γενίκευση – Κληρονομικότητα (3/3) class Technical extends Employee { public Technical(String s, int b, int h, int p) {super(s,b,h,p);} public String getEmpType() {return "Technical";} public void calcSalary() { int s=0; if (payType==0) s=800+b; else s=(h*10); System.out.println(" Sarary = " + s); }

19 19Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Εξάρτηση Εξάρτηση (Dependency) Απεικονίζει την εξάρτηση δύο κλάσεων, δηλαδή την εξάρτηση που έχει μια κλάση προς μια άλλη, για την ύπαρξη ή υλοποίηση της. Στη java θεωρούμε εξάρτηση την περίπτωση που η εξαρτώμενη κλάση κάνει αναφορά (με αντικείμενο) στην κλάση από την οποία εξαρτάται ή έχει μεθόδους στις οποίες περνούν σαν παράμετροι αντικείμενα της κλάσης από την οποία εξαρτάται. public class PaymentSystem { : : } public class Order { public void processPayment(PaymentSystem ps){ }

20 20Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Συνάθροιση Συνάθροιση (Aggregation) Απεικονίζει την “έχει ένα” – σχέση, δηλαδή τονίζει ότι το “όλον” aαποτελείται από μέρη που θα υπάρχουν ακόμη και αν το “όλον” καταστραφεί. Είναι ένα είδος συσχέτισης. Απεικονίζεται με τον διάφανο ρόμβο και στη java ακολουθούμε τους συμβολισμούς και πολλαπλότητες της συσχέτισης. public class Student { : : } public class School { private Student student; }

21 21Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Σύνθεση Σύνθεση (Composition) Απεικονίζει την σχέση του “όλον” με τα “μέρη” του μόνο που αν το όλον καταστραφεί, τότε τα μέρη του δεν μπορούν να υπάρχουν ανεξάρτητα. Ένα κομμάτι ή μέρος του όλου μπορεί να έχει ένα ιδιοκτήτη, π.χ. ένας δημόσιος υπάλληλος μπορεί να είναι έχει μια θέση σε δημόσιο οργανισμό ή εταιρία. Απεικονίζεται με τον γεμάτο (μαύρο) ρόμβο και στη java ακολουθούμε τους συμβολισμούς και πολλαπλότητες της συνάθροισης με την βοήθεια και τοπικών μεταβλητών. public class Professor { : : } public class University { private Professor[] professors; }

22 22Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Παραδείγματα Απεικονίσεων (1/2) Παραδείγματα Απεικονίσεων (1/2) Από το βιβλίο: UML Class Diagrams for Java Programmers Απεικόνιση κλάσης:

23 23Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Παραδείγματα Απεικονίσεων (2/2) Απεικόνιση Κληρονομικότητας: Υλοποίηση Διεπαφής:

24 24Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Εργαλεία εξαγωγής πληροφορίας από πηγαίο κώδικα (ή και μορφή bytecode) και η κατασκευή ή ενημέρωση ενός μοντέλου UML. αντιστρέφεται Η παραγωγή κώδικα από διαγράμματα αντιστρέφεται, και δημιουργούνται διαγράμματα (συνήθως κλάσεων και ακολουθίας) από υπάρχοντα κώδικα (reverse engineering). συνέπεια μεταξύ μοντέλου και κώδικα Έτσι διατηρείται η συνέπεια μεταξύ μοντέλου και κώδικα, καθώς κάθε αλλαγή στον κώδικα ενημερώνει αυτόματα το μοντέλο – τα διαγράμματα UML (συγχρονισμός μοντέλου - κώδικα). Εργαλεία Eclipse και VP

25 25Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Έστω ο κώδικας: abstract class Employee { String name; protected int payType; protected int b; protected int h; Employee(String s, int b_, int h_, int p) {name=s; payType=p; b=b_; h=h_;} public String getName() {return name;} public String getPayType() { String pType; if (payType==0) pType="Salary"; else pType="ByHour"; return pType; } abstract String getEmpType(); abstract void calcSalary(); } Visual Paradigm - Παράδειγμα (1/7)

26 26Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ class Administrator extends Employee { Administrator(String s, int b, int h, int p) {super(s,b,h,p);} public String getEmpType() {return "Administrator";} public void calcSalary() { int s=0; if (payType==0) s=1000+b; else s=(h*12); System.out.println(" Sarary = " + s); }} class Technical extends Employee { public Technical(String s, int b, int h, int p) {super(s,b,h,p);} public String getEmpType() {return "Technical";} public void calcSalary() { int s=0; if (payType==0) s=800+b; else s=(h*10); System.out.println(" Sarary = " + s); } } Visual Paradigm - Παράδειγμα (2/7)

27 27Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ class Company { Employee emp[]= new Employee[4]; public void setEmployee(Employee e,int a) {emp[a]=e;} public void printAll() { for (int i=0;i<4;i++) { System.out.println("Name = "+ emp[i].getName()); System.out.println("Type Of Employment = "+ emp[i].getEmpType()); System.out.println("Type Of Payment = "+ emp[i].getPayType()); System.out.println(); emp[i].calcSalary(); } } } class Ask1 { public static void main(String[] args) { int a; Employee e1= new Technical("Nikas",10,10,0); Employee e2=new Administrator("Vasileiou",10,10,1); Employee e3= new Technical("Paylidis",10,10,1); Employee e4=new Administrator("Apostolatos",10,10,0); Company c = new Company(); Visual Paradigm - Παράδειγμα (3/7) c.setEmployee(e1,0); c.setEmployee(e2,1); c.setEmployee(e3,2); c.setEmployee(e4,3); c.printAll(); } }

28 28Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Το αποτέλεσμα του προγράμματος: Visual Paradigm - Παράδειγμα (4/7)

29 29Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Αυτόματα με την επιλογή Instant Reverse, αφού έχουμε εισάγει τις java κλάσεις: Visual Paradigm - Παράδειγμα (5/7)

30 30Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Visual Paradigm - Παράδειγμα (6/7)

31 31Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Visual Paradigm - Παράδειγμα (7/7) Προσοχή Προσοχή στα: 1)Είδη σχέσεων μεταξύ κλάσεων 2)Είδη ορατότητας

32 32Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Στο Eclipse θα εγκαταστήσουμε το plugin : ObjectAid Εγκατάσταση: 1) Ανοίγουμε το Eclipse, πάμε Help > Install New Software 2) Πατάμε add και εισάγουμε το όνομα ObjectAid UML Explorer 3) Εισάγουμε την διεύθυνση του plugin: Eclipse – Παράδειγμα (1/6)

33 33Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Στις επιλογές που εμφανίζει επιλέγουμε μόνο το ObjectAid Class Diagram – plugin, γιατί τα άλλα (π.χ. Sequence diagrams) είναι επί πληρωμή, ενώ αυτό free και πατάμε Next. Eclipse – Παράδειγμα (2/6)

34 34Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Πατάμε Finish για να τελειώσει η εγκατάσταση. Πατάμε Οk στο μήνυμα προειδοποίησης για το security του plugin και κάνουμε Restart το Eclipse. Eclipse – Παράδειγμα (3/6)

35 35Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Για να δημιουργήσουμε ένα UML διάγραμμα με τον ObjectAid wizard από τον java κώδικα μας, πατάμε: 1)File > New > Other… 2)Επιλέγουμε στο textbox Class Diagram και πατάμε Next 3)Εισάγουμε τον κατάλογο όπου θα αποθηκεύσουμε το διάγραμμα και το όνομα του διαγράμματος. Eclipse – Παράδειγμα (4/6)

36 36Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Στον visual UML editor δημιουργείται μια κενή κλάση (με κατάληξη.ucls) όπου με drag and drop μπορούμε να “ρίξουμε” οποιαδήποτε κλάση ή ολόκληρο πρόγραμμα με κλάσεις και να γίνει η εμφάνιση του UML – class diagram. Eclipse – Παράδειγμα (5/6)

37 37Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Ο κώδικας είναι ο ίδιος με το παράδειγμα VP, αλλά εδώ η κλάση της main() Ονομάζεται EmployeeTest και όχι Ask1. Το παραγόμενο διάγραμμα: Eclipse – Παράδειγμα (6/6) Προσοχή στις διαφορές ορατότητας


Κατέβασμα ppt "Μηχανική Λογισμικού ΙΙ Αντίστροφη Μηχανική Reverse Engineering Παναγιώτης Σφέτσος, PhD"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google