Best Practices for Software System Design

Slides:



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

Ch:8 Design Concepts S.W Design should have following quality attribute: Functionality Usability Reliability Performance Supportability (extensibility,
High Quality Code Why it matters. By Ryan Ruzich.
Unified Modeling Language
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Chapter 1 Object-Oriented.
Software Engineering and Design Principles Chapter 1.
Software Engineering 1 Provisional Revision Plan.
1 Jul 2005CSE403, Summer'05, Section 02 Section 02: Life Cycle Architecture Review Valentin Razmov.
1 Lecture 5 Introduction to Software Engineering Overview  What is Software Engineering  Software Engineering Issues  Waterfall Model  Waterfall Model.
(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.
13 Jul 2006CSE403, Summer'06, Lecture10 Lifecycle Architecture Review: Preliminary Feedback Valentin Razmov.
2.5 OOP Principles Part 2 academy.zariba.com 1. Lecture Content 1.Polymorphism 2.Cohesion 3.Coupling 2.
1/19 Component Design On-demand Learning Series Software Engineering of Web Application - Principles of Good Component Design Hunan University, Software.
Eng. Mohammed Timraz Electronics & Communication Engineer University of Palestine Faculty of Engineering and Urban planning Software Engineering Department.
University of Toronto Department of Computer Science CSC444 Lec05- 1 Lecture 5: Decomposition and Abstraction Decomposition When to decompose Identifying.
An Introduction to Design Patterns. Introduction Promote reuse. Use the experiences of software developers. A shared library/lingo used by developers.
Object-Oriented Software Engineering Practical Software Development using UML and Java Chapter 7: Focusing on Users and Their Tasks.
1 Chapter 5 Software Engineering Practice. 2 What is “Practice”? Practice is a broad array of concepts, principles, methods, and tools that you must consider.
Chapter 17 GRASP: Designing Objects with Responsibilities. 1CS6359 Fall 2011 John Cole.
Y2 eProjects Session 4 – Advanced Topics. Objectives  Dynamic Models  Design Patterns (Optional)  Software testing (for S4) ACCP i7.1\Sem3_4\eProject\T4.
Review: Cohesion and Coupling, Mutable, Inheritance Screen Layouts Software methodologies – Extreme Programming Object-Oriented Design – CRC Cards - UML.
Chapter 7 Software Engineering Introduction to CS 1 st Semester, 2015 Sanghyun Park.
©Ian Sommerville 2006Software Engineering, 8th edition. Chapter 11 Slide 1 Design.
GRASP: Designing Objects with Responsibilities
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.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved COS240 O-O Languages AUBG,
Dr.Basem Alkazemi
An Automatic Software Quality Measurement System.
ECE450 - Software Engineering II1 ECE450 – Software Engineering II Today: Introduction to Software Architecture.
Internet and Intranet Protocols and Applications Lecture 5a: HTTP Client-Server Design and Implementation February 15, 2005 Arthur Goldberg Computer Science.
Software Engineering and Object-Oriented Design Topics: Solutions Modules Key Programming Issues Development Methods Object-Oriented Principles.
11 Jul 2005CSE403, Summer'05, Lecture 08 Lecture 08: Best Practices for Software Design (Part I) Valentin Razmov.
Design and Planning Or: What’s the next thing we should do for our project?
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Object-Oriented Design.
High Quality Code – Style Matters  Design in Construction  Layout and Style Software Construction by Jeff Nogy.
UML Course Instructor: Rizwana Noor. Overview  Modeling  What is UML?  Why UML?  UML Diagrams  Use Case  Components  Relationships  Notations.
Chapter 5 – Software Tools. 5.1 Introduction Tools valuable for –Specification –Interface Building –Evaluation.
Object-Oriented Software Engineering Practical Software Development using UML and Java Modelling with Classes.
07 Jul 2006CSE403, Summer'06, Lecture10 Lecture 10: Core Principles and Best Practices for Software Design (Part I) “Treat design as a wicked, sloppy,
Basic Characteristics of Object-Oriented Systems
Deliverables: Zero-Feature Release Build process, installation process, code repository, automated testing framework, bug tracking system Maybe no tests.
14 Jul 2005CSE403, Summer'05, Lecture 09 Lecture 09: Fundamental Principles and Best Practices for Software Design Valentin Razmov.
Software Development Life Cycle. The Software Life Cycle  Encompasses all activities from initial analysis until end of work  Formal process for software.
Design Concepts ch-8
CSE 219 Final exam review.
Unit - 3 OBJECT ORIENTED DESIGN PROCESS AND AXIOMS
GRASP – Designing Objects with Responsibilities
Design Patterns: MORE Examples
Introduction to Design Patterns
Chapter 11 Object-Oriented Design
Collaborations and Hierarchies
Reference: COS240 Syllabus
UML The Unified Modelling Language. A way of drawing code overviews so that it's understood by any programmer. Usually part of a software development 'process'.
Unified Modeling Language (UML)
MCS morning (3rd semester) Department of CS&IT
The Object Oriented Approach to Design
Software Engineering Lecture #8.
Lecture 02: Software Lifecycle Models
Informatics 122 Software Design II
Component-Level Design
Lecture 03: Software Lifecycle Models
Object oriented analysis and design
Lecture 09: Software Architecture (Part I)
CSE403 Software Engineering Autumn 2000 Design (Overview)
Questions First On class? On project? On material we’ve discussed?
Week 5.
Informatics 122 Software Design II
References: Eddie Burris, Rick Mercer
Questions First On class? On project? On material we’ve discussed?
Week 5.
Presentation transcript:

Best Practices for Software System Design CSE403 Lecture 6: Best Practices for Software System Design Valentin Razmov, CSE403, Sp'05

Techniques for Design Best practices for software system design “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, 2nd ed., chap 5, http://www.cc2e.com/docs/Chapter5-Design.pdf Best practices for software system design Standard notations for expressing designs Dataflow / state diagram Class diagram Sequence diagram

Notations: Dataflow / State Diagram High-level, coarse grained Used to describe interactions between the components of a system Example:

Notations: Class Diagram Medium-level Used to describe the relationships between classes (modules) in the system Example:

Notations: Sequence Diagram Low-level, fine-grained Used to describe sequences of invocations between the objects that comprise the system Example:

Your Questions on Notations for Software Design

Best Practices for Software Design Create at least three (3) independent designs and choose the best among them. Keep it simple (a.k.a. KISS principle). Scale down the feature set to only the parts that are strictly necessary Reference: Standish report, http://www.standishgroup.com/

Best Practices for Software Design (cont.) Ask yourself how you may test your design / components easily. Testability is correlated with good design quality. If you need to do extra work to test, something is wrong. The culprit is usually tight coupling between modules. Do not invest too much into drawing early designs - they will change substantially. Write on index cards, rearranging and redrawing. Write on whiteboards and take snapshots with a camera. Don’t use UML or other CAD tools - they discourage changes and your design documents will quickly become obsolete.

Best Practices for Software Design (cont.) Learn and use design patterns as much as you can. They are distilled knowledge about good designs. Reference: Design Patterns Explained (2nd ed.), Alan Shalloway Establish and maintain a clear audit trail. It requires little investment upfront but is invaluable for debugging purposes.

Best Practices for Software Design (cont.) Consider if there are any single points of failure or bottlenecks in your designs. Can those be avoided or compensated for? Make the common case fast and the uncommon case correct. But do not spend time on optimizing code early on. “It is easier to optimize correct code than to correct optimized code.” --Donald Knuth

Best Practices for Software Design (cont.) 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 Use abstractions as much as possible. Example (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; ... }

Best Practices for Software Design (cont.) Favor composition over inheritance. Example: A module should have a single responsibility. Principle of strong cohesion “God-object” metaphor

Your Questions on Best Practices for Software Design