A (partial) blueprint for dealing with change

Slides:



Advertisements
Similar presentations
Design Principles & Patterns
Advertisements

Stability and Volatility is Software Design H. Rahnama Tutorial in software engineering.
General OO Concepts and Principles CSE301 University of Sunderland Harry R. Erwin, PhD.
Lecture 9 Improving Software Design CSC301-Winter 2011 – University of Toronto – Department of Computer Science Hesam C. Esfahani
Software Requirements Engineering
SOLID Object Oriented Design Craig Berntson
1 Software Maintenance and Evolution CSSE 575: Session 6, Part 1 The “SEAM” Model Steve Chenoweth Office Phone: (812) Cell: (937)
These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 6/e and are provided with permission by.
Liskov Substitution Principle
Developed by Reneta Barneva, SUNY Fredonia Component Level Design.
CLASS DESIGN PRINCIPLES Lecture 2. The quality of the architecture What is a good design? It is the design that at least does not have signs of “bad”.
CSE 303 – Software Design and Architecture
1 OO Design Novosoft, 2001 by V. Mukhortov. 2 OO Design Goals  Flexibility Changes must be localized  Maintainability Modules requiring changes can.
Coupling and Cohesion Pfleeger, S., Software Engineering Theory and Practice. Prentice Hall, 2001.
Ch:10 Component Level Design Unit 4. What is Component? A component is a modular building block for computer software Because components reside within.
Company Confidential – Do Not Duplicate 2 Copyright 2008 McLane Advanced Technologies, LLC S.O.L.I.D. Software Development Achieving Object Oriented Principles,
CSC 395 – Software Engineering Lecture 12: Reusability –or– Programming was Bjarne Again.
© 2004 Capgemini - All rights reserved SOLID - OO DESIGN PRINCIPLES Andreas Enbohm, Capgemini.
These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 6/e and are provided with permission by.
CSE 301 Exam Revision Lecture
Introduction to SOLID Principles. Background Dependency Inversion Principle Single Responsibility Principle Open/Closed Principle Liskov Substitution.
S.O.L.I.D. Software Development 12 January 2010 (Martin Verboon, Patrick Kalkman, Stan Verdiesen)
SWE © Solomon Seifu ELABORATION. SWE © Solomon Seifu Lesson 12-5 Software Engineering Design Goals.
The benefits of SOLID in software development Ruben Agudo Santos (GS-AIS-HR)
Software Engineering Principles. SE Principles Principles are statements describing desirable properties of the product and process.
 What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.
1 OO Package Design PrinciplesStefan Kluth 4OO Package Design Principles 4.1Packages Introduction 4.2Packages in UML 4.3Three Package Design Principles.
Incremental Design Why incremental design? Goal of incremental design Tools for incremental design  UML diagrams  Design principles  Design patterns.
Elements of OO Abstraction Encapsulation Modularity Hierarchy: Inheritance & Aggregation 4 major/essential elements3 minor/helpful elements Typing Concurrency.
1 Software Engineering: A Practitioner’s Approach, 6/e Chapter 11a: Component-Level Design Software Engineering: A Practitioner’s Approach, 6/e Chapter.
Design for testability as a way to good coding Simone Chiaretta Architect, Council of the EU December 9 th,
High Cohesion Low Coupling Old Standards for Object Oriented Programming.
Five design principles
CHAPTER 3 MODELING COMPONENT-LEVEL DESIGN.
Principles of Object Oriented Design
PRINCIPLES OF OBJECT ORIENTED DESIGN S.O.L.I.D. S.O.L.I.D Principles What is SOLID?  Acrostic of 5 Principles:  The Single Responsibility Principle.
Component Design Elaborating the Design Model. Component Design Translation of the architectural design into a detailed (class-based or module- based)
SOLID Design Principles
These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 6/e and are provided with permission by.
Session 33 More on SOLID Steve Chenoweth Office: Moench Room F220 Phone: (812) Chandan Rupakheti Office: Moench.
SOLID PHP & Code Smell Wrap-Up
Chapter 10 Software quality. This chapter discusses n Some important properties we want our system to have, specifically correctness and maintainability.
Microsoft Advertising 16:9 Template Light Use the slides below to start the design of your presentation. Additional slides layouts (title slides, tile.
Beginning Software Craftsmanship Brendan Enrick Steve Smith
Design I. Properties of good design Minimize complexity Maintainable Loose coupling Extensibility Reusability High fan in Low to medium fan out Portability.
Mantas Radzevičius ifm-2/2
Course information Old exam Resit Report Result and walkthrough
Object-Orientated Analysis, Design and Programming
Software Architecture & Difference from Design
CSE687 - Object Oriented Design class notes Survey of the C++ Programming Language Jim Fawcett Spring 2004.
CMPE 135: Object-Oriented Analysis and Design October 24 Class Meeting
Copyright © by Curt Hill
Software Engineering: A Practitioner’s Approach, 6/e Chapter 11 Component-Level Design copyright © 1996, 2001, 2005 R.S. Pressman & Associates, Inc.
Software Re-engineering - Theoretical and Practical Approaches
Chapter 4 Functions Objectives
lecture 08, OO Design Principle
Software Engineering Lecture #8.
11/29/2018 © 2014 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks.
Need for the subject.
Design Tips.
Software Design Lecture : 14.
Department of Computer Science Regression Testing.
CMPE 135 Object-Oriented Analysis and Design March 21 Class Meeting
The SOLID Principles.
Designing for Volatility
Object Oriented Design & Analysis
Dependency Inversion principle
Some principles for object oriented design
Interface Segregation Principle
Chapter 10 – Component-Level Design
Presentation transcript:

A (partial) blueprint for dealing with change Solid Principles A (partial) blueprint for dealing with change

Agenda Software Facts of Life Good Software Design SOLID Principles Single Responsibility Principle Open/Closed Principle Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle

Software Facts of Life Code has ZERO intrinsic value Developers are engineers, not artists

Software Facts of Life Code has ZERO intrinsic value Developers are engineers, not artists High maintenance costs – 50 – 80% of total cost of ownership

Software Facts of Life Code has ZERO intrinsic value Developers are engineers, not artists High maintenance costs – 50 – 80% of total cost of ownership It is harder to modify code than to write it

Characteristics of Good Software Design Maintainability – minimal effort spent finding and fixing issues; easy to update

Characteristics of Good Software Design Maintainability – minimal effort spent finding and fixing issues; easy to update Legibility – easy for new (or forgetful) developers to jump in

Characteristics of Good Software Design Maintainability – minimal effort spent finding and fixing issues; easy to update Legibility – easy for new (or forgetful) developers to jump in Extensibility – easy to add new, and expand existing, features

Characteristics of Good Software Design Maintainability – minimal effort spent finding and fixing issues; easy to update Legibility – easy for new (or forgetful) developers to jump in Extensibility – easy to add new, and expand existing, features Reusability – easy to reuse low level components

Characteristics of Good Software Design Maintainability – minimal effort spent finding and fixing issues; easy to update Legibility – easy for new (or forgetful) developers to jump in Extensibility – easy to add new, and expand existing, features Reusability – easy to reuse low level components In Short: Adaptability “Intelligence is the ability to adapt to change” – Stephen Hawking

Single Responsibility (SRP) Each component should have one and only one reason to change Helps limit the scope of changes

Open/Closed (OCP) Components should be open for extension and closed for modification Helps provide control and assurance of what is changing Heavy reliance on compliance with the SRP

Liskov Substitution (LSP) Derived classes must be substitutable for their base classes (or any of their siblings) Also applies to concrete implementations of abstractions Prevents dependents from having to know about all implementations of an abstraction Makes it possible for external contract implementations to change

Interface Segregation (ISP) Interfaces should be minimalistic and client specific Provides for minimal change impact

Goldilocks Conundrum Cohesion versus Coupling How do we reduce coupling while maintaining cohesion?

Too Few High Coupling Low Cohesion I always know who to go to for questions Every change affects this single person, and this person has to know about and remember every single change

Too Many Low Coupling High Cohesion Each person is responsible for very little, so training them and keeping them updated is extremely easy When I have a question, it is very difficult to figure out who I should ask

Just Right Moderate Coupling Moderate Cohesion When I have a question, I probably know who to ask. Even if I don’t know who to ask, I can very quickly check with each person involved.

Dependency Inversion Modules should depend upon abstract concepts, not concrete implementations Allows all levels of the application to be insulated from change

Resources http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod http://galorath.com/wp- content/uploads/2014/08/software_total_ownership_costs- development_is_only_job_one.pdf