02:01© 2005-2015 hello2morrow1 Love your Architecture Alexander v. Zitzewitz blog.hello2morrow.com.

Slides:



Advertisements
Similar presentations
Object-Oriented Software Development CS 3331 Fall 2009.
Advertisements

CPSC 875 John D. McGregor C20 – Technical Debt. Data Analytics Architecture.
Chapter 22 UML Tooks and UML as Blueprint Model-Driven Architecture (MDA) Object-Constraint Language (OCL)
1 The Database Application Development Process The Database Application Development Process.
CSE 331 wrapup CSE 331 University of Washington. CSE 331 goals Enable students to manage complexity ensure correctness write modest programs.
1 Postdelivery Maintenance Xiaojun Qi. 2 Why Postdelivery Maintenance Is Necessary Corrective maintenance: To correct residual faults –Analysis, design,
Copyright 2002 Prentice-Hall, Inc. Chapter 4 Automated Tools for Systems Development 4.1 Modern Systems Analysis and Design Third Edition Jeffrey A. Hoffer.
Analysis Stage (Phase I) The goal: understanding the customer's requirements for a software system. n involves technical staff working with customers n.
Computer Engineering 203 R Smith Agile Development 1/ Agile Methods What are Agile Methods? – Extreme Programming is the best known example – SCRUM.
CPSC 875 John D. McGregor C20 – Technical Debt. Value-based SE SCS – success-critical stakeholder.
CS350/550 Software Engineering Lecture 1. Class Work The main part of the class is a practical software engineering project, in teams of 3-5 people There.
1 CS115 Class 7: Architecture Due today –Requirements –Read Architecture paper pages 1-15 Next Tuesday –Read Practical UML.
© Copyright Eliyahu Brutman Programming Techniques Course.
Applied Software Project Management Andrew Stellman & Jennifer Greene Applied Software Project Management Applied Software.
Pattern Myths1 Ten Design Pattern Myths Jim Fawcett condensed from Pattern Hatching, John Vlissides, Addison-Wesley, 1998.
Architectural Design Establishing the overall structure of a software system Objectives To introduce architectural design and to discuss its importance.
Chapter 9 – Software Evolution and Maintenance
CASE Tools And Their Effect On Software Quality Peter Geddis – pxg07u.
1 Introduction Chapter 1. 2 Key Ideas Many failed systems were abandoned because analysts tried to build wonderful systems without understanding the organization.
1/19 Component Design On-demand Learning Series Software Engineering of Web Application - Principles of Good Component Design Hunan University, Software.
Design-Making Projects Work (Chapter7) n Large Projects u Design often distinct from analysis or coding u Project takes weeks, months or years to create.
Object Oriented Analysis and Design Introduction.
Team Skill 6: Building the Right System From Use Cases to Implementation (25)
11:57© , hello2morrow1 Software Sustainability Alexander v. Zitzewitz hello2morrow, Inc.
Introduction CS 3358 Data Structures. What is Computer Science? Computer Science is the study of algorithms, including their  Formal and mathematical.
Identify steps for understanding and solving the
University of Southern California Center for Systems and Software Engineering Retrospective Analysis Supannika Koolmanojwong October 21,
CSC 395 – Software Engineering Lecture 12: Reusability –or– Programming was Bjarne Again.
CS 325: Software Engineering February 12, 2015 Applying Responsibility-Assignment Patterns Design Patterns Situation-Specific Patterns Responsibility-Assignment.
Basic Concepts Software Architecture. What is Software Architecture? Definition: – A software architecture is the set of principal design decisions about.
Software Architecture and Design Dr. Aldo Dagnino ABB, Inc. US Corporate Research Center October 23 rd, 2003.
Introduction CS 3358 Data Structures. What is Computer Science? Computer Science is the study of algorithms, including their  Formal and mathematical.
Object-Oriented Analysis and Design Fall 2009.
4/1/05F-1 © 2001 T. Horton CS 494 Object-Oriented Analysis & Design Packages and Components in Java and UML.
THE DESIGN WORKFLOW  Object-oriented design  The design workflow  The test workflow: Design  CASE tools for design  Challenges of the design workflow.
CBSE 2014 Modeling Components with UML. Bibliography Modelling components in UML – Main text: Kim Hamilton, Russell Miles, Learning UML 2.0, OReilly,
22-January-2003cse FunctionalSpecs © 2003 University of Washington1 Functional Specs CSE 403, Winter 2003 Software Engineering
Elements of OO Abstraction Encapsulation Modularity Hierarchy: Inheritance & Aggregation 4 major/essential elements3 minor/helpful elements Typing Concurrency.
Experiences from Representing Software Architecture in a Large Industrial Project Using Model Driven Development Andres Mattsson 1 Björn Lundell 2 Brian.
ECE450 - Software Engineering II1 ECE450 – Software Engineering II Today: Introduction to Software Architecture.
CSE 331 Software Design & Implementation Hal Perkins Autumn 2012 Wrapup 1.
Software Design Patterns Curtsy: Fahad Hassan (TxLabs)
CASE (Computer-Aided Software Engineering) Tools Software that is used to support software process activities. Provides software process support by:- –
Source Mastering UML with Rational Rose 2002 Information System Engineering Introduction to UML.
ANU COMP2110 Software Design in 2003 Lecture 10Slide 1 COMP2110 Software Design in 2004 Lecture 12 Documenting Detailed Design How to write down detailed.
Computer Science 340 Software Design & Testing Software Architecture.
Topic 4 - Database Design Unit 1 – Database Analysis and Design Advanced Higher Information Systems St Kentigern’s Academy.
CS451 Software Maintenance Yugi Lee STB #555 (816) Note: This lecture was designed based on Stephen Schach’s.
Source Mastering UML with Rational Rose 2002 Information System Engineering Introduction to UML.
Refactoring Agile Development Project. Lecture roadmap Refactoring Some issues to address when coding.
Basic Concepts and Definitions
Software Design Patterns in Test Automation
Software Development Life Cycle(SDLC)‏
Java State Explorer by: Richard Sherman Stephanie Taylor.
09:18© , hello2morrow1 Golden Rules to Improve Your Architecture Alexander v. Zitzewitz hello2morrow Inc.
Basic Concepts of Software Architecture. What is Software Architecture? Definition: – A software system’s architecture is the set of principal design.
Designing classes How to write classes in a way that they are easily understandable, maintainable and reusable 6.0.
Chapter 2- Software Development Process  Product Components  Software Project Staff  Software Development Lifecycle Models.
Software Engineering cosc 4359 Spring 2017.
GRASP – Designing Objects with Responsibilities
Information Systems Development
Top Ten List for Directors of Technology
Chapter 1 OBJECT-ORIENTED ANALYSIS AND DESIGN
Solutions – Oracle’s Story
Tools of Software Development
Objects First with Java
CBSE 2014 Modeling Components with UML
Better Architecture Management Made Easy
Games Development 2 Entity / Architecture Review
Presentation transcript:

02:01© hello2morrow1 Love your Architecture Alexander v. Zitzewitz blog.hello2morrow.com

The single best thing you can do for the long term health, quality and maintainability of a non-trivial software system is to carefully manage and control the dependencies between its different elements and components by defining and enforcing an architectural blueprint over its lifetime © , hello2morrow2 Loving Architecture equals Dependency Management

Because, if you don’t… © , hello2morrow3 Architecture of Apache-Cassandra (or what is left of it)

So, why is it not happening in every project? “Software-Architects” rarely do architecture, i.e. dependency management If they do it, it is often informal (PowerPoint, Wiki etc.) That means it is hard to check conformity of code to architectural rules Rules that are not enforced will be broken Often nobody in the team is really responsible for technical quality, and that includes architecture and structure Agile projects consider architecture as a side effect of a user story Who has time for this?? © , hello2morrow4

Understanding Technical Debt as a Metaphor Ward Cunningham first defined the term in 1992: “Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite… The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation, object-oriented or otherwise.” © , hello2morrow5

Categories of Technical Debt CategoryRepair CostVisible Impact Maintainability Impact ProgrammingLowMediumMostly low TestingPotentially HighHighMedium Local/Global MetricsLow / HighLowLow / High ArchitectureVery HighLowVery High © , hello2morrow6

Agile Development and Architecture The agile approach does not automatically create maintainable and well architected systems. Often the opposite is true. Ongoing management of Technical Debt is considered to be a critical success factor for high quality and maintainable software systems even by promoters of the agile approach Architectural debt is a very toxic form of technical debt That challenges the idea that software development should almost exclusively be driven by business value Project size has obviously an important influence © , hello2morrow7

02:01© , hello2morrow8 Architectural Debt – Symptoms (Robert C. Martin) Rigidity – The system is hard to change because every change forces many other changes. Fragility – Changes cause the system to break in conceptually unrelated places. Immobility – It's hard to disentangle the system into reusable components. Viscosity – Doing things right is harder than doing things wrong. Opacity – It is hard to read and understand. It does not express its intent well. Overall: “The software starts to rot like a bad piece of meat”

Do you manage Technical/Architectural Debt? Do you have binding rules for code quality? Do you measure quality rule violations on a daily base? Is your architecture defined in a formal way? Do you measure architecture violations on a daily base? Does quality management happen at the end of development? Does your current QM lead to sustainable results? Are there incentives for writing great code? © , hello2morrow9

How to give love to your Architecture Define your architecture in a formal and enforceable way (we’ll get to the details) Use tools to check for violations of architecture rules, ideally with every commit or directly in the IDE Broken architecture rules have to be fixed while it is still easy to fix them Avoid cyclic dependencies between packages or higher level artifacts Invest about 20% of all development and maintenance effort into code hygiene and architecture © , hello2morrow10

Example : Cyclic Dependency AlarmClock AlarmHandler PresentationModel Main AlarmToConsole AlarmToFile

Breaking the Cycle AlarmClock > AlarmHandler Main > IAlarmHandler AlarmToConsole AlarmToFile Presentation > Model

Introducing a DSL to describe Architecture © , hello2morrow13

Advantages of a DSL Easy to read and understand Works well with version control systems and can be diffed Can be changed without access to a tool More powerful than just drawing boxes Different aspects can be described in independent files Architecture diagrams can be generated Architecture files can be generated from diagrams © , hello2morrow14

Components A component is the atomic element of architecture Usually a single source file, in C/C++ a combination of header and source files Is addressed via the relevant parts of its physical location © , hello2morrow15 Patterns address groups of components

Artifacts Artifacts can contain components or other artifacts Artifacts have interfaces and connectors An interface is an incoming port granting access to a subset of components in artifact A connector is an outgoing port that can be connected to an interface of another artifacts Connections are only possible between connectors and interfaces Each artifact has a default connector and a default interface, both containing all components in the artifacts User can restrict the default connector and the default interface © , hello2morrow16

Artifacts Example © , hello2morrow17

Encapsulation © 2015, hello2morrow GmbH18 Artifact 1 Artifact 2 Connector Artifact 1.1 Interface Unlimited nesting depth of artifacts Encapsulation: Controlling access via Interface (outside- in) and Connector (inside-out)

Now lets build an Architecture step by step © , hello2morrow19

Q & A blog.hello2morrow.com