Software-Architecture Introduction Prof. Dr. Axel Böttcher Summer Term 2011 3. Oktober 2011
Overview 2 hours lecture, 2 hours lab sessions per week. Certificate ( Schein ) is prerequisite for admittanceto final exam. Written Exam 90 Minutes Practical lessons: Certificate is handed out for successful solution of the assignments.
Module description Goals/Competencies The ability to design, evaluate, implement, and operate modern architectures for complex software systems. More specific: Extend your software craftsmanship skills Integration of large frameworks,libraries and components into a software product Understanding large existing software projects Do things right from the beginning
Literature J. Bloch: Effective Java, 2nd Edition, Addison Wesley 2008 (Absolut Spitze) R. C. Martin Clean Code Prentice Hall 2009 (sehr zu empfehlen) O. Vogel et al.:software-architektur; Grundlagen Konzepte Praxis, Spektrum Akademischer Verlag 2005 E. Freeman et al.: Head First Design Patterns, O Reilly 2004
Some Definitions Software Architecture is the most advanced discipline in Software-Engineering. It deals with the question of how to structure a project with millions of lines of code such tht the result has high quality Every Software has an Architecture. The architecture comprises of all up-front decisions, i.e. every decision that is difficult to change when the software has evolved significantly.
Aufgaben und Abhängigkeiten Mit dem Begriff Architektur wird auch eine gewisse Ästhetik verbunden: Software darf nicht nur daran gemessen werden, ob sie momentan ihre Aufgabe erfüllt (funktionale Anforderungen), sondern, ob sie ästhetisch ist: DIN ISO 9126: Funktionalität: Richtigkeit, Angemessenheit, Interoperabilität, Ordnungsmäßigkeit, Sicherheit Zuverlässigkeit: Reife, Fehlertoleranz, Wiederherstellbarkeit Benutzbarkeit: Verständlichkeit, Erlernbarkeit, Bedienbarkeit Effizienz: Zeitverhalten, Verbrauchsverhalten Änderbarkeit: Analysierbarkeit, Modifizierbarkeit, Stabilität, Prüfbarkeit Übertragbarkeit: Anpassbarkeit, Installierbarkeit, Konformität, Austauschbarkeit All das muss der Architekt berücksichtigen.
Definition (Bass et al.) The software architecture of a program or computing system is a structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them. Thus: Structure or structures Software elements Relationships (Interaktion) Visible properties
Architectural Views You can compare this to different plans of building structure (electricat currency, water, sewerage,...) 1. Conceptual View (Konzeptionelle Sicht) 2. Module View (Modulsicht) 3. Execution View (Ausführungssicht) 4. Code View (Programmsicht)
Agile Techniques Principles that drive agile teams: Short cycles (frequent releases, permanent decissions on next features) Small releases close interaction with the customer automated tests and Test-Driven Development Coding Standards Refactoring Pair Programming Collective Ownership
Patterns (Design Patterns, Architectural Patterns) Code Reuse = Experience Reuse Patterns are template solutions for repeating problems. Architectural Patterns describe fundamental structures, predefined subsystems and their responsibilities (mainly in the conceptional view) Design Patterns describe subsystems (mainly in module and program view). Patterns do not define the concrete architecture itself. Similar to the statement thi schurch is built in Gothic stayle that does not describe the building, but only some fundamental aspects: floorplan is latin cross high walls, huge windows pointed arch (Spitzbogen) vertical emphasis