Softwaretechnik (Allgemeine Informatik) Überblick



Ähnliche Dokumente
Softwaretechnik (Allgemeine Informatik) Überblick

Verwendung von OO-Metriken zur Vorhersage

Software-Metriken. Dipl.-Ing.(BA) Henning Sievert Seminar Software-Entwurf WS 2004/05

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Software Engineering in der Praxis

Test-Driven Design: Ein einfaches Beispiel

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Was bringt TDD wirklich?

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Prinzipien Objektorientierter Programmierung

Java: Vererbung. Teil 3: super()

Objektorientierte Programmierung OOP

Programmieren in Java

Einführung in die Programmierung

Objektorientierte Programmierung

Qualitätsmanagement im Projekt

SEP 114. Design by Contract

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Java Kurs für Anfänger Einheit 5 Methoden

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Software-Metriken. Wolfgang Globke. Seminar Moderne Softwareentwicklung SS Software-Metriken. Wolfgang Globke. Metriken und Qualitätsmodelle

Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken

Testen mit JUnit. Motivation

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Große Übung Praktische Informatik 1

Überblick. Lineares Suchen

Objektorientierte Programmierung

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Inhalt. Fragestellungen. ...we make the invisible visible... Analysen und deren Anwendung Erfahrungen

Objektorientierte Programmierung. Kapitel 12: Interfaces

Design Patterns 2. Model-View-Controller in der Praxis

Einführung in die Informatik Tools

Software Engineering Klassendiagramme Assoziationen

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Pragmatik von Programmiersprachen

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Übungsklausur vom 7. Dez. 2007

Client-Server-Beziehungen

Softwareentwicklungsprozess im Praktikum. 23. April 2015

Grundlagen von Python

Übungen zur Softwaretechnik

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Comparison of Software Products using Software Engineering Metrics

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Source Code Konverter Online: (VB.net <-> C#) Kommerzielle Produkte (VB, C#, C++, Java) Code Nachbearbeitung in der Praxis...

Java Entwicklung für Embedded Devices Best & Worst Practices!

Graphic Coding. Klausur. 9. Februar Kurs A

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Assoziation und Aggregation

Einführung in Javadoc

Java Einführung Packages

Programmierkurs Java

Übung: Verwendung von Java-Threads

Probeklausur Softwareengineering SS 15

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Erster Bug: eine Motte

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Agile Software Development

Klassenbeziehungen & Vererbung

Einführung in die Programmierung für Wirtschaftsinformatik

Refactoring relationaler Datenbank. Shaoke Wu

PRÜFUNG FÜR ELEKTROINGENIEURE. Softwaretechnik I. Musterlösung SS Ohne Gewähr -

Software Entwicklung II (SS12)

.NET Code schützen. Projekt.NET. Version 1.0

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Tagesprogramm

Übung 9 - Lösungsvorschlag

Applet Firewall und Freigabe der Objekte

teischl.com Software Design & Services e.u. office@teischl.com

Einführung in die Programmierung

SDD System Design Document

Inhalt Software-Metriken Software-Metriken mit Together FindBugs. Software-Metriken. Raimar Lill Matthias Meitner David Föhrweiser Marc Spisländer

Java Einführung Abstrakte Klassen und Interfaces

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Probeklausur. Lenz Belzner. January 26, Lenz Belzner Probeklausur January 26, / 16

Software-Metriken. B. Sc. Michael Thomas. Seminar Software-Entwurf WS 2004/05.

Code-Erzeugung aus UML-Klassendiagrammen

Informationswirtschaft 2: Überblick

Reengineering und Refactoring von Softwarearchitekturen

Objektbasierte Entwicklung

EndTermTest PROGALGO WS1516 A

Informationssystemanalyse Problemstellung 2 1. Trotz aller Methoden, Techniken usw. zeigen Untersuchungen sehr negative Ergebnisse:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Das Pflichtenheft. Dipl.- Ing. Dipl.-Informatiker Dieter Klapproth Ains A-Systemhaus GmbH Berlin

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Javakurs zu Informatik I. Henning Heitkötter

Algorithmen und Datenstrukturen

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version:

Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009

Software Engineering Interaktionsdiagramme

Folge 18 - Vererbung

Transkript:

Softwaretechnik (Allgemeine Informatik) Überblick 1 Einführung und Überblick 2 Abstraktion 3 Objektorientiertes Vorgehensmodell 4 Methoden der Anforderungs- und Problembereichsanalyse 5 UML-Diagramme 6 Objektorientiertes Design 7 Test 8 Audits, Metriken, Refactoring 9 Dokumentation und Wartung 10 Projektmanagement und organisation 11 Source Revision Control Systems Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 671 Softwaretechnik (Allgemeine Informatik) Überblick: 8.1 Einleitung 8.2 Software Audits Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 672

8.1 Einleitung Definition (Martin Fowler): Refactoring is making changes to a body of code in order to improve its internal structure, without changing its external behavior. Verbesserung des Designs Zukünftige Änderungen sind leichter möglich Zukünftige Änderungen nicht erwartet: Kein Refactoring Auch Bestandteil des Extreme Programming (XP) Paradigmas Martin Fowler: Refactoring: Improving the Design of Existing Code, Addison-Wesley, 1999 Wo soll die Code-Änderung stattfinden? Automatisiertes Finden der kritischen Stellen Qualitätssichernde Audits Software Metriken Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 673 8.1 Einleitung Code Review Kategorien Programmier Standards Entwurfs-Prinzipien Geschäftslogik Laufzeitverhalten (Performance) Audits Statische Überprüfung des Quellcodes Anwendung von Programmierkonstrukten Einhaltung sog. best practices Namenskonventionen Verwendung bestimmter Operatoren (+=) Exception handling Umformatierung des Codes Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 674

8.1 Einleitung Metriken Nicht so präzise definiert (subtle science) Helfen bei Diskussionen über gutes Design Kennzahlen für Einhaltung bekannter softwaretechnischer Konzepte Zusammenhalt (cohesion) Kopplung (coupling) Kapselung (encapsulation) Vererbung Komplexität Polymorphismus Wichtig, Herkunft und Bedeutung der Kennzahlen zu verstehen Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 675 8.1 Einleitung Automatische Durchführung von Audits und automatische Berechnung von Metriken 4 Mentoren von Borland Java Quelltext mit vielen wohlbekannten Verstößen 15 Minuten Zeit Ergebnis Mentoren: 21 Verstöße in 15 Minuten gefunden Together ControlCenter: 150 Verstöße in 2 Sekunden Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 676

Softwaretechnik (Allgemeine Informatik) Überblick: 8.1 Einleitung 8.2 Software Audits Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 677 8.2 Software Audits Automatische Durchführung von Überprüfungen von Quelltext Formatierung Programmierstil Überflüssige Inhalte Fehler bei einer bestimmten Programmiersprache Nachlesbar für Java in Effectiv Java programmieren (Joshua Bloch) Code Reviews Helfen Nachwuchsprogrammierern in ihrer Einarbeitungsphase Automatische Auditing Tool hilft, Schwachstellen zu identifizieren Weist automatisch auf offensichtliche Verstöße hin Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 678

8.2 Software Audits Together ControlCenter Java: ca. 100 Kriterien C++: z.zt. 27 Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 679 8.2 Software Audits Ergebnisse Sun Blueprint Program PetStore 1.3 Sun Code Conventions for Java 5258 Verstöße Together ControlCenter Default 851 Verstöße Apache Ant Version 1.4 Together ControlCenter Default 2752 Verstöße 442 davon: High Severity Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 680

Softwaretechnik (Allgemeine Informatik) Überblick: 8.1 Einleitung 8.2 Software Audits Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 681 Metriken erstellen Zählen und messen Hat relative Skala zur Folge Schwerpunkt auf Entwurfsqualität Mögliche Schwächen feststellen Signifikanz der Aussagen ist jedoch nicht beweisbar Voraussetzungen Metriken verstehen Was wird gemessen? Wie wird es gemessen? Wie müssen Ergebnisse interpretiert werden? Objektorientierte Prinzipien kennen Anwendungsdomäne kennen Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 682

Beispiel Metriken Together ControlCenter bietet 11 Gruppen von Metriken zur Qualitätskontrolle an Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 683 Beispiel Metriken Mehrere Details pro Gruppe Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 684

Beispiel Metriken Sechs Basis Metriken (Chidamber & Kemerer 1994) Depth of Inheritance Hierarchy (DOIH) Number of Child Classes (NOCC) Coupling between Objects (CBO) Response for Class (RFC) Weighted Methods per Class (WMPC) Lack of Cohesion of Methods (LOCOM) McCabe 1976 Cyclomatic Complexity (CC) Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 685 Depth of Inheritance Hierarchy (DOIH) Standard Eigenschaft von objektorientierten Entwürfen Alternativen Delegation/Komposition Interface-basierte Entwurfsstrategien DOIH: Anzahl der Elternklassen einer Klasse + 1 d.h. inkl. der eigenen Klasse d.h. oberste Klasse hat Zähler 1 Java Together ControlCenter zählt Implementierungen von Interfaces nicht mit Interface Vererbung wird gezählt Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 686

Number of Child Classes (NOCC) Anzahl der Subklasse, die von dieser Klasse erben Wachsendes NOCC Wiederverwendung nimmt zu Testen wird schwieriger Gefahr des Missbrauchs der Vererbung nimmt zu Java Implementierte Interfaces zählen mit I/F ist durch Klasse implementiert Klasse hat 6 Nachfahren I/F hat NOCC von 7 Klasse hat NOCC von 6 Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 687 Coupling between Objects (CBO) Kopplung zwischen Objekten ist beim objektorientierten Entwurf eine Notwendigkeit Zuviel kann jedoch von Nachteil bezüglich Modularität, Wartung und Testen sein CBO: Anzahl der zu einer Klasse gekoppelten anderen Klassen Referenzen, Exceptions, formale Parameter Jede Klasse nur einmal Nicht gezählt werden Elternklassen, implementierte Interfaces, Standardklassen (Java: java.lang.*), primitive Datentypen Hoher Wert Schwächung der Modularität ist zu erwarten Manchmal nicht zu vermeiden Factories, Controllers, Frameworks von User Interfaces Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 688

Coupling between Objects (CBO) Beispiel (in Java) public class CBO extends Base implements Metric { private int number; 1 private List list; private String string; 2 public void one(list l, Map m) { list = l; } 3 private List throws AppException { 4 File file;... return new List(); } } CBO = 4 Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 689 Response for Class (RFC) Anzahl von Methoden, die einer Klasse zur Verfügung stehen Intern Klasse und Vorfahrenklassen (überschriebene Methoden nur einmal) Extern Aufgerufene Methoden anderer Klassen (nur die direkt aufgerufenen) Maß für Komplexität einer Klasse Klasse mit vielen öffentlichen Methoden Wird von einem Klienten intensiv benutzt Klient hat hohen RFC-Wert aber möglicherweise nur einen CBO-Wert von 1 CBO misst Kopplung RFC misst Komplexität Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 690

Cyclomatic Complexity (CC) (McCabe, 1976) Anzahl der möglichen Pfade durch eine Methode aufgrund ihrer bedingten Anweisungen Beispiel public void one() { if (true) { while(false) { ; } } else { for (int i=0; i<10; i++) { ; } } } if for if for while while if for if for while while Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 691 Cyclomatic Complexity (CC) (McCabe, 1976) Seien die Pfade durch eine Methode durch einen Directed Acyclic Graph (DAC) repräsentiert if if while e Kanten n Knoten p nicht verbundene Teile CC = V ( G) = e n + 2 p for for while Ergebnis hier: 8 6 + 2 * 1 = 4 if while if while for for Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 692

Weighted Methods per Class (WMPC) Summe der CC-Werte pro Methode für eine Klasse WMPC = n cci i= 1 Together ControlCenter: WMPC1 Alternativ: Anzahl der Methoden plus deren formale Parameter Together ControlCenter: WMPC2 Großer Wert von WMPC: Zeit und Aufwand für Entwicklung und Pflege wächst Potential für Wiederverwendung kann abnehmen Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 693 Weighted Methods per Class (WMPC) Klasse mit einer langen und komplexe Methode WMPC1 groß WMPC2 klein Klasse mit vielen kleinen, nicht komplexen Methoden Ähnliche Werte für WMPC1 und WMPC2 Daten Klasse mit getters und setters für jedes Attribut WMPC2 ist größer als WMPC1 Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 694

Lack of Cohesions of Methods (LOCOM) Ungleichheit der Methoden einer Klasse bezüglich deren Attribute Arbeiten verschiedene Methoden mit verschiedenen Sätzen von Attributen? Großer Wert Geringer Zusammenhalt Anzahl Methoden: m Menge von Attributen: A j Anzahl Attribute: a Anzahl Methoden, die auf A j zugreifen: µ(a j ) LOCOM 1 a = a µ ( A i= 1 1 m j ) m 100 Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 695 Lack of Cohesions of Methods (LOCOM) Together ControlCenter: LOCOM3 1 a LOCOM = a µ ( A ) i= 1 j m 100 1 m one() one() a1 a1 a2 a2 LOCOM3 = 100 LOCOM3 = 33 Kein Zusammenhalt Hoher Zusammenhalt a3 a3 Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 696

Interpretation Balkendiagramm: Ein Metriktyp für alle Klassen Rot: Obergrenze überschritten Blau: Untergrenze unterschritten Grün: o.k. Kiviat Graph Mehrere Metriken für eine Klasse oder ein Package Skaliert auf einheitlichen Wert (roter Kreis) Distribution Graph Verteilung der konkreten Werte einer Metrik über den gesamten Wertebereich (Histogramm) Trendanalyse Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 697 Softwaretechnik (Allgemeine Informatik) Überblick: 8.1 Einleitung 8.2 Software Audits Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 698

Refactoring Unterstützung in Entwicklungstools Gibt es mittlerweile Woher weiß man, wo etwas geändert werden muss? Software Audits Analyse von Metriken Vorgehensweise Führe Unit Tests, Audits, Code Formatierung durch Erstelle Metriken und analysiere sie Untersuche die kritischen Bereiche Refactor Code, setze ggf. Design Patterns ein Führe alle Tests, Audits und Metrikenerstellung neu durch Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 699 Extract Class Refactoring High Coupling (CBO) Lack of Cohesion (LOCOM3) Number of Attributes (NOA) Extract Method Refactoring Maximum Size of Operation (MSOO) Response for Class (RFC) Maximum Number of Levels (MNOL) Cyclomatic Complexity (CC) Weighted Methods per Class (WMPC1, WMPC2) Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 700

Tomcat 4.0.3 Default Satz von Metriken Resultat: Gesamter Quellcode Maximalwert jeder Metrik über alle Klassen Aggregation: Maximum Granularität: Class Nicht typisch für bestimmte Klasse Die Maximalwerte kommen irgendwo vor Genauer: MSOO: Max. CC in Klasse WMPC1: Summe CC in Klasse Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 701 Klasse WebdavServlet Höchster MSOO Wert Auch WMPC1 ist hoch, wenn auch nicht am höchsten im Projekt Vorgehensweise JUnit Test Cases durchführen Default Audits 2 unused private class members Reformatiere Code... Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 702

Extract Method Refactoring dolock() Methode ist extrem lang Chance, einen Teil des Codes in eine separate Methode auszulagern Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 703 Extract Class Refactoring WebdavServlet LOCOM3-Wert ist 92: Wenig Zusammenhalt In Ordnung NOO: Number of Operations NOC: Number of Inner Classes NOAM: Number of added Methods NOA: Number of Attributes Kritisch NORM: Number of Remote Methods FO: Fan Out HPLen: Program Length LOC: Lines of Code Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 704

Was tut das WebdavServlet? service() Methode: Verschachtelte Verzweigung zu entsprechender do*- Methode Refactoring durch Ersetzen der bedingten Verzweigung durch Polymorphismus Für jede Methode eine implementierte Klasse Factory Pattern zur Erzeugung der passenden Klasse Prof. Dr. Björn Dreher Softwaretechnik (Allgemeine Informatik) 705