07 Jul 2006CSE403, Summer'06, Lecture10 Lecture 10: Core Principles and Best Practices for Software Design (Part I) “Treat design as a wicked, sloppy,

Slides:



Advertisements
Similar presentations
Software Engineering Key design concepts Design heuristics Design practices.
Advertisements

High Quality Code – Style Matters  Chapter 5. Design in Construction  Chapter 31. Layout and Style Software Construction by Jeff Nogy.
(c) 2009 University of California, Irvine – André van der Hoek1June 13, 2015 – 21:42:16 Informatics 122 Software Design II Lecture 8 André van der Hoek.
10 Aug 2005CSE403, Summer'05, Lecture 15 Lecture 15: Configuration Management, Software Maintenance, and Code Reviews (Part I) Valentin Razmov.
29 Jul 2005CSE403, Summer'05 Student Startup Sequence Verify network connection Rotate to Landscape mode Start Presenter 2.0 Maximize Application Role->Student.
Design Patterns. What are design patterns? A general reusable solution to a commonly occurring problem. A description or template for how to solve a problem.
Administrivia Lifecycle Architecture (LCA) group assignment will go out later today. Informal feedback meetings with LCO groups EasyShare: Mon, 2:45pm-3:15pm,
1 Jul 2005CSE403, Summer'05, Section 02 Section 02: Life Cycle Architecture Review Valentin Razmov.
The Software Design Process CPSC 315 – Programming Studio Fall 2009.
15 Jul 2005CSE403, Summer'05, Lecture 10 Lecture 10: Incremental Releases Valentin Razmov.
(c) 2010 University of California, Irvine – André van der Hoek1June 29, 2015 – 08:55:05 Informatics 122 Software Design II Lecture 8 André van der Hoek.
PRESENTED BY SANGEETA MEHTA EECS810 UNIVERSITY OF KANSAS OCTOBER 2008 Design Patterns.
13 Jul 2006CSE403, Summer'06, Lecture10 Lifecycle Architecture Review: Preliminary Feedback Valentin Razmov.
Creational Patterns Making Objects The Smart Way Brent Ramerth Abstract Factory, Builder.
1/19 Component Design On-demand Learning Series Software Engineering of Web Application - Principles of Good Component Design Hunan University, Software.
“Enhancing Reuse with Information Hiding” ITT Proceedings of the Workshop on Reusability in Programming, 1983 Reprinted in Software Reusability, Volume.
SWE 316: Software Design and Architecture – Dr. Khalid Aljasser Objectives Lecture 11 : Frameworks SWE 316: Software Design and Architecture  To understand.
Agile Modeling Theory. 2 Agile Modeling (AM) AM is a chaordic, practices-based process for modeling and documentation AM is a collection of practices.
1 Chapter 5 Practice: A Generic View Software Engineering: A Practitioner’s Approach, 6th edition by Roger S. Pressman.
Design, prototyping and construction CSSE371 Steve Chenoweth and Chandan Rupakheti (Chapter 11- Interaction Design Text)
22 Jul 2005CSE403, Summer'05, Lecture 12 Lecture 12: Scheduling, Estimation, and Prioritization (Part II) Valentin Razmov.
An Introduction to Design Patterns. Introduction Promote reuse. Use the experiences of software developers. A shared library/lingo used by developers.
Creational Patterns CSE301 University of Sunderland Harry R Erwin, PhD.
Y2 eProjects Session 4 – Advanced Topics. Objectives  Dynamic Models  Design Patterns (Optional)  Software testing (for S4) ACCP i7.1\Sem3_4\eProject\T4.
Valentin Razmov, CSE403, Sp'05 CSE403 Section 1: The Fate of Software Projects Learning = Practice + Feedback Desirable Qualities in Teammates Team-Building.
Chapter 7 Software Engineering Introduction to CS 1 st Semester, 2015 Sanghyun Park.
CSE 403, Spring 2008, Alverson Software Design “There are two ways of constructing a software design: one way is to make it so simple that there are obviously.
06 Jul 2006CSE403, Summer'06, Lecture08 Lecture 08: Requirements Gathering Techniques (Part II) Valentin Razmov “The goal of requirements engineering is.
05 Jul 2006CSE403, Summer'06, Lecture07 Administrivia Informal feedback meetings with LCO groups FantasySportsLeague: still to come today Individual assignment.
Chapter 17 – Object- Oriented Design. Chapter Goals To learn about the software life cycle To learn about the software life cycle To learn how to discover.
Design Patterns. 1 Paradigm4 Concepts 9 Principles23 Patterns.
More Design Patterns From: Shalloway & Trott, Design Patterns Explained, 2 nd ed.
Design Patterns Introduction
CS251 – Software Engineering Lectures 18: Intro to DP Slides by Rick Mercer, Christian Ratliff, Oscar Nierstrasz and others 1 و ابتغ فيما آتاك الله الدار.
11 Jul 2005CSE403, Summer'05, Lecture 08 Lecture 08: Best Practices for Software Design (Part I) Valentin Razmov.
CS 4240: Rethinking Some OOP Ideas and Terms for OOA&D Readings: Chap. 8 in Shalloway and Trott (referred to as S&T in these slides) Wikipedia on information.
CSE 403 Lecture 27 Course Wrap-up Discussion slides created by Marty Stepp
Design Patterns in Context ©SoftMoore ConsultingSlide 1.
High Quality Code – Style Matters  Design in Construction  Layout and Style Software Construction by Jeff Nogy.
Chapter 5 – Software Tools. 5.1 Introduction Tools valuable for –Specification –Interface Building –Evaluation.
Five Minute Design Patterns Doug Marttila Forest and the Trees May 30, 2009 Template Factory Singleton Iterator Adapter Façade Observer Command Strategy.
Duke CPS Programming Heuristics l Identify the aspects of your application that vary and separate them from what stays the same ä Take what varies.
05 Jul 2006CSE403, Summer'06, Lecture08 Lecture 08: Techniques for Gathering Requirements Valentin Razmov “The goal of requirements engineering is to develop.
Deliverables: Beta Release Installation package Application sources and binaries One-step build for all sources Latest specification & design documents.
Part 1: Composition, Aggregation, and Delegation Part 2: Iterator COMP 401 Fall 2014 Lecture 10 9/18/2014.
Deliverables: Zero-Feature Release Build process, installation process, code repository, automated testing framework, bug tracking system Maybe no tests.
CLASSIFICATION OF DESIGN PATTERNS Hladchuk Maksym.
07 Aug 2006CSE403, Summer'06 Final Exam: Take-home versus In-class Valentin Razmov Take-home No rush to complete in 1 hour at 9:40am More realistic (but.
14 Jul 2005CSE403, Summer'05, Lecture 09 Lecture 09: Fundamental Principles and Best Practices for Software Design Valentin Razmov.
27 Jul 2006CSE403, Summer'06, Lecture 15 Midterm Exam Statistics Other statistics: Average: 40.6 Median: 42.3 Std Dev: 6.2 Max: 46.5 Min: 28 Easiest Problems:
Design Patterns: MORE Examples
Chapter 5:Design Patterns
Design Patterns Lecture part 2.
Introduction to Design Patterns
Best Practices for Software System Design
Lecture 11: Scheduling, Estimation, and Prioritization
How to be a Good Developer
object oriented Principles of software design
How to be a Good Developer
EECE 310 Software Engineering
Informatics 122 Software Design II
Beta Release Retrospective
Lecture 03: Software Lifecycle Models
Lecture 09: Software Architecture (Part I)
Questions First On class? On project? On material we’ve discussed?
Informatics 122 Software Design II
Chapter 8, Design Patterns Introduction
References: Eddie Burris, Rick Mercer
Questions First On class? On project? On material we’ve discussed?
Lecture 07: Team Environment Issues (Part I)
Presentation transcript:

07 Jul 2006CSE403, Summer'06, Lecture10 Lecture 10: Core Principles and Best Practices for Software Design (Part I) “Treat design as a wicked, sloppy, heuristic process. Don’t settle for the first design that occurs to you. Collaborate. Strive for simplicity. Prototype when you need to. Iterate, iterate, and iterate again. You’ll be happy with your designs.” -- Steve McConnell, Code Complete (2 nd ed.), Ch. 5 Valentin Razmov

07 Jul 2006CSE403, Summer'06, Lecture10 Outline Best practices for software system design Time-tested design principles With examples Valentin Razmov

07 Jul 2006CSE403, Summer'06, Lecture10 Resources “Code Complete”, 2 nd ed., by Steve McConnell Ch. 5: “The Pragmatic Programmer”, by Andrew Hunt and David Thomas Ch. 2 (section 7), Ch. 5 (section 26) “On the Criteria to be Used in Decomposing Systems into Modules”, by David Parnas “Design Patterns Explained”, by Alan Shalloway and James Trott Valentin Razmov

07 Jul 2006CSE403, Summer'06, Lecture10 Why Learn How to Design? Valentin Razmov

07 Jul 2006CSE403, Summer'06, Lecture10 More Perspectives on How to Approach Design “There are two ways of constructing a software design: one way is to make it so simple that there are obviously no deficiencies; the other is to make it so complicated that there are no obvious deficiencies.” -- C.A.R. Hoare (1985) Valentin Razmov

07 Jul 2006CSE403, Summer'06, Lecture10 Best Practices for Software Design (1/5) Create at least three independent designs and choose the best one among them. Keep it simple (a.k.a. KISS principle). Scale down the feature set to only the parts that are strictly necessary Source: Standish report Valentin Razmov

07 Jul 2006CSE403, Summer'06, Lecture10 Best Practices for Software Design (2/5) Ask yourself how you may test your components. Testability is correlated with good design quality. If you need to do extra work to test, something is likely wrong. The culprit is usually tight coupling between modules. Do not invest too much into visualizing early designs – they will change substantially. Write on index cards, rearranging and redrawing. Write on whiteboards; take camera snapshots. Avoid CAD tools and even UML-editing software – they are heavyweight and discourage making changes, so your design documents will quickly become obsolete. Valentin Razmov

07 Jul 2006CSE403, Summer'06, Lecture10 Best Practices for Software Design (3/5) Learn and use design patterns. Represent distilled knowledge about good designs MVC is one well-known example. Define a language to more effectively describe designs (e.g., façade, visitor, bridge, strategy, etc.) Source: Design Patterns Explained, Alan Shalloway Consider if there are single points of failure or bottlenecks in your designs. Can those be avoided or compensated for? Valentin Razmov

07 Jul 2006CSE403, Summer'06, Lecture10 Best Practices for Software Design (4/5) Use abstractions as much as possible. Example (of what not to do): class Square { double lower_left_x_coord; double lower_left_y_coord; double lower_right_x_coord; double lower_right_y_coord;... } Encapsulate changing components; fix the interfaces between them. Why not allow interfaces to change in order to enable the addition of new components later on (as needed)?! Reference: On the Criteria to be Used in Decomposing Systems into Modules, David Parnas Valentin Razmov

07 Jul 2006CSE403, Summer'06, Lecture10 Best Practices for Software Design (5/5) Favor composition over inheritance. Example: Valentin Razmov