Οσμές στη Σχεδίαση του Λογισμικού

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Τεχνολογία ΛογισμικούSlide 1 Έλεγχος Καταψύκτη (Ada) Τεχνολογία ΛογισμικούSlide 39 with Pump, Temperature_dial, Sensor, Globals, Alarm; use Globals ; procedure.
Advertisements

Ελληνικό γραφείο υποστήριξης: Entwined with the teaching of English.
6 Η ΠΑΡΟΥΣΙΑΣΗ: ΠΑΝΤΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΟΙΝΩΝΙΚΩΝ ΚΑΙ ΠΟΛΙΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ: ΕΠΙΚΟΙΝΩΝΙΑΣ, ΜΕΣΩΝ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗ ΔΙΑΦΗΜΙΣΗ.
Οσμές στη Σχεδίαση του Λογισμικού (Code Smells) Πρόγραμμα Μεταπτυχιακών Σπουδών στην Εφαρμοσμένη Πληροφορική.
“ Ἡ ἀ γάπη ἀ νυπόκριτος. ἀ ποστυγο ῦ ντες τ ὸ πονηρόν, κολλώμενοι τ ῷ ἀ γαθ ῷ, τ ῇ φιλαδελφί ᾳ ε ἰ ς ἀ λλήλους φιλόστοργοι, τ ῇ τιμ ῇ ἀ λλήλους προηγούμενοι.
ΗΥ Παπαευσταθίου Γιάννης1 Clock generation.
6/26/2015HY220: Ιάκωβος Μαυροειδής1 HY220 Asynchronous Circuits.
ΟΡΓΑΝΙΣΜΟΣ ΒΙΟΜΗΧΑΝΙΚΗΣ ΙΔΙΟΚΤΗΣΙΑΣ “Preparing Europe for Global Competition” THE NETWORK : The Patent and Trademark Offices.
Week 11 Quiz Sentence #2. The sentence. λαλο ῦ μεν ε ἰ δότες ὅ τι ὁ ἐ γείρας τ ὸ ν κύριον Ἰ ησο ῦ ν κα ὶ ἡ μ ᾶ ς σ ὺ ν Ἰ ησο ῦ ἐ γερε ῖ κα ὶ παραστήσει.
WRITING B LYCEUM Teacher Eleni Rossidou ©Υπουργείο Παιδείας και Πολιτισμού.
COURSE CODE: DES-102 COURSE TITLE: DECORATION DRAWING TUTOR: DOMENICA RENKO SEMESTER: FALL 2010 PROJECT: 2 | hand-out: week 10 – hand-in: week 11 | duration:
Install WINDOWS 7 Κουτσικαρέλης Κων / νος Κουφοκώστας Γεώργιος Κάτσας Παναγιώτης Κουνάνος Ευάγγελος Μ π ουσάη Ελισόν Τάξη Β΄ Τομέας Πληροφορικής 2014 –’15.
Ο PID έλεγχος. Integral Lag Distance velocity lag Υλοποιούμε την.
VOICES OF YOUNG PEOPLE IN EUROPE-STREET ART by 1st EPAL ELEFSINAS Teacher’s name : Εleni Alexandraki(ΠΕ 06)
Ενδείξεις κυστεκτομής σε μη μυοδιηθητικό καρκίνο ουροδόχου κύστης Αθανάσιος Γ. Παπατσώρης Επ. Καθηγητής Ουρολογίας Β’ Ουρολογική Κλινική Πανεπιστημίου.
Αριθμητική Επίλυση Διαφορικών Εξισώσεων 1. Συνήθης Δ.Ε. 1 ανεξάρτητη μεταβλητή x 1 εξαρτημένη μεταβλητή y Καθώς και παράγωγοι της y μέχρι n τάξης, στη.
ΑΣΦΑΛΕΙΑ ΑΣΘΕΝΩΝ (PATIENT SAFETY) ωφελέειν ή μη βλάπτειν ωφελέειν = θεραπευτική παρέμβαση μη βλάπτειν = ασφάλεια ασθενών.
Κωδικός Θ: ΤΠ4003, Κωδικός Ε: ΤΠ4103 (ΜΕΥ/Υ) Ώρες (Θ - ΑΠ - Ε): Προαπαιτούμενα: ΤΠ2003,2103.
Ψηφιακά Παιχνίδια και μάθηση Δρ. Νικολέτα Γιαννούτσου Εργαστήριο Εκπαιδευτικής Τεχνολογίας.
Διαχείριση Διαδικτυακής Φήμης! Do the Online Reputation Check! «Ημέρα Ασφαλούς Διαδικτύου 2015» Ε. Κοντοπίδη, ΠΕ19.
From Applying Theory to Theorising Practice Achilleas Kostoulas Epirus Institute of Technology.
Guide to Business Planning The Value System © Guide to Business Planning The “value system” is also referred to as the “industry value chain”. In contrast.
Μαθαίνω με “υπότιτλους”
Prepositions and Review
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΤΕΧΝΟΛΟΓΙΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΙΑΚΩΝ ΔΙΑΔΙΚΑΣΙΩΝ
Ερωτήσεις –απαντήσεις Ομάδων Εργασίας
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Φάσμα παιδαγωγικής ανάπτυξης
Jane Austen Pride and Prejudice (περηφάνια και προκατάληψη)
Αντίληψη Αντίληψη του φυσικού κόσμου που μας περιβάλλει, μέσω του νευρικού μας συστήματος (sensory perception). Η αντίληψη αποτελεί δημιούργημα του εγκεφάλου.
Λ. Μήτρου, Επικ. Καθηγήτρια – Πανεπιστήμιο Αιγαίου Κανονιστικές και Κοινωνικές Διαστάσεις της Κοινωνίας της Πληροφορίας /3 Χειμερινό εξάμηνο
ΠΑΙΔΑΓΩΓΙΚΗ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΘΕΩΡΙΕΣ ΜΑΘΗΣΗΣ Μάριος Κουκουνάρας-Λιάγκης
Ποιότητα Λογισμικού Έλεγχος λογισμικού
Αλγόριθμοι Ταξινόμησης – Μέρος 3
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών Νομική Σχολή
Class X: Athematic verbs II
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Keystroke-Level Model
Πανεπιστήμιο Θεσσαλίας
JSIS E 111: Intensive Elementary Modern Greek
GO.
Adjectives Introduction to Greek By Stephen Curto For Intro to Greek
(ALPHA BANK – EUROBANK – PIRAEUS BANK)
JAVA – Basic OOP Principles
Μία πρακτική εισαγωγή στην χρήση του R
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών Νομική Σχολή
Πανεπιστήμιο Θεσσαλίας
Εκπαιδευτική ρομποτική
Children with visual disability in the digital environment
JSIS E 111: Elementary Modern Greek
aka Mathematical Models and Applications
GLY 326 Structural Geology
Find: angle of failure, α
ΕΝΣΤΑΣΕΙΣ ΠΟΙΟΣ? Όμως ναι.... Ένα σκάφος
Find: minimum B [ft] γcon=150 [lb/ft3] γT=120 [lb/ft3] Q φ=36˚
ΑΠΟΣΤΑΞΗ Distillation.
Class V: Personal Pronouns and 3rd Decl. Cont. (chs )
Διάλεξη #10: Εκτέλεση Java χωρίς το BlueJ
Λέξεις που αλλάζουν νόημα αν είναι μετρήσιμα ή μη μετρήσιμα
Υπο-τύποι και πολυμορφισμός
Find: ρc [in] from load (4 layers)
Προοπτικό σχέδιο με 3 σημεία φυγής
Εθνικό Μουσείο Σύγχρονης Τέχνης Faceforward … into my home!
CPSC-608 Database Systems
Class X: Athematic verbs II © Dr. Esa Autero
Nonindicative of δίδωμι Conditional Sentences
Baggy Bounds checking by Akritidis, Costa, Castro, and Hand
I have to take the MAP again?
Μεταγράφημα παρουσίασης:

Οσμές στη Σχεδίαση του Λογισμικού (Code Smells) Πρόγραμμα Μεταπτυχιακών Σπουδών στην Εφαρμοσμένη Πληροφορική

Design Problems non-compliance with design principles excessive metric values violations of design heuristics lack of design patterns Fowler’s bad smells

Software Ageing well-designed code Design quality decays

Οσμές Οι ενδείξεις κακής σχεδίασης λογισμικού είναι γνωστές ως «οσμές» λογισμικού (code smells - Fowler) Τα code smells δεν προκαλούν προβλήματα στη λειτουργικότητα του συστήματος (για αυτό και συχνά συσσωρεύονται) Ωστόσο, η ύπαρξή τους ενδέχεται να δυσχεράνει τη μελλοντική συντήρηση του λογισμικού (προσθήκη λειτουργικότητας, διόρθωση σφαλμάτων, κατανόηση, επαναχρησιμοποίηση κλπ) Οι κακές οσμές ανιχνεύονται σχετικά εύκολα από τους έμπειρους σχεδιαστές και ο εντοπισμός μπορεί να υποβοηθάται από εργαλεία Οι οσμές μπορούν να εξαλειφθούν με την εφαρμογή κατάλληλη αναδόμησης

Long Method Pieces of code with large size, high complexity and low cohesion int i; int product = 1; for(i = 0; i < N; ++i) { product = product *i; } System.out.println(product); int i; int sum = 0; for(i = 0; i < N; ++i) { sum = sum + i; } System.out.println(sum); Ενδεδειγμένη Αναδόμηση: Εξαγωγή μεθόδου (Extract Method)

Feature Envy A method is “more interested in a class other than the one it actually is in” Target m1() m2() m3() Source m(Target t) { t.m1(); t.m2(); t.m3(); } m() { m1(); m2(); m3(); } Ενδεδειγμένη Αναδόμηση: Μετακίνηση μεθόδου (Move Method)

Large (& Complex) Class You have one class doing work that should be done by two Καθηγητής + υπολΦόρου(); + υπολΑπόδοσης(); - type : int ΑΦΜ Εφορία Εισόδημα Αξιολόγηση Βαθμολογία Σεμινάρια Καθηγητής + υπολΑπόδοσης(); - type : int Αξιολόγηση Βαθμολογία Σεμινάρια Υπάλληλος + υπολΦόρου(); - type : int ΑΦΜ Εφορία Εισόδημα Ενδεδειγμένη Αναδόμηση: Εξαγωγή Κλάσης (Extract Class)

Duplicated Code Ενδεδειγμένη Αναδόμηση: Pull Up Method Number one on the stink parade is duplicated code. If you see the same code structure in more than one place, you can be sure that your program will be better if you find a way to unify them Ενδεδειγμένη Αναδόμηση: Pull Up Method

State Checking State Checking manifests itself as conditional statements that select an execution path based on the state of an object Context + method() { type.method(); } - type : int - STATE_A : int = 1 - STATE_B : int = 2 Context + method() { } - type : int - STATE_A : int = 1 - STATE_B : int = 2 Type +method() type switch(type) { case STATE_A: break; case STATE_B: } doStateA(); StateA +method() { } StateB +method() { } doStateB(); Ενδεδειγμένη Αναδόμηση: Αντικατάσταση Συνθήκης με Πολυμορφισμός (Replace Conditional with Polymorphism)

And even more complex smells Refused Bequest

Context Mammal + breatheAir() + regulateBodyTemp() + giveBirthToLiveYoung() + produceMilkIfFemale() + swim() In the world of OO systems, inheritance is not a panacea + breatheAir() + regulateBodyTemp() + giveBirthToLiveYoung() + produceMilkIfFemale() + swim() + breatheAir() + regulateBodyTemp() + giveBirthToLiveYoung() + produceMilkIfFemale() + swim()

Problem Goal: Identification of Refused Bequest Code Smells “a subclass does not want to support the interface inherited from its parent class” [Fowler] non-trivial problem to resolve Appropriate Refactoring: Replace Inheritance with Delegation Famous quote: “Favor Composition over Inheritance” [GoF]