Software Engineering Key design concepts Design heuristics Design practices.

Slides:



Advertisements
Similar presentations
Ch:8 Design Concepts S.W Design should have following quality attribute: Functionality Usability Reliability Performance Supportability (extensibility,
Advertisements

Structured Design. 2 Design Quality – Simplicity “There are two ways of constructing a software design: One is to make it so simple that there are obviously.
Object-Oriented Software Development CS 3331 Fall 2009.
Ch 3 System Development Environment
By Justin Hendrix. Design Challenges Design is the activity that links requirements to coding and debugging. Good design is useful on small project and.
Design Concepts and Principles
1 Software Design Introduction  The chapter will address the following questions:  How do you factor a program into manageable program modules that can.
High Quality Code Why it matters. By Ryan Ruzich.
High Quality Code – Style Matters  Chapter 5. Design in Construction  Chapter 31. Layout and Style Software Construction by Jeff Nogy.
Copyright W. Howden1 Lecture 6: Design Evaluation and Intro to OO Design Patterns.
Design The goal is to design a modular solution, using the techniques of: Decomposition Abstraction Encapsulation In Object Oriented Programming this is.
Ch3: Software Engineering Principles 1 What is a principle?  Definition:  Goals of accounting principles:  Goals of software engineering principles?
Chapter 1 Principles of Programming and Software Engineering.
The Software Design Process CPSC 315 – Programming Studio Fall 2009.
© 2006 Pearson Addison-Wesley. All rights reserved2-1 Chapter 2 Principles of Programming & Software Engineering.
Chapter 22 Object-Oriented Design
System Design Decomposing the System. Sequence diagram changes UML 2.x specifications tells that Sequence diagrams now support if-conditions, loops and.
Introduction to Software Design Chapter 1. Chapter 1: Introduction to Software Design2 Chapter Objectives To become familiar with the software challenge.
The Design Discipline.
Chapter 5CSA 217 Design in Construction Chapter 5 1.
Design Patterns OOD. Course topics Design Principles UML –Class Diagrams –Sequence Diagrams Design Patterns C#,.NET (all the course examples) Design Principles.
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.
111 Subsystems CS 4311 Wirfs Brock et al., Designing Object-Oriented Software, Prentice Hall, (Chapter 7)
An Introduction to Software Architecture
CSE 303 – Software Design and Architecture
Chapter 9 Moving to Design
Design engineering Vilnius The goal of design engineering is to produce a model that exhibits: firmness – a program should not have bugs that inhibit.
Software Engineering Principles Principles form the basis of methods, techniques, methodologies and tools Principles form the basis of methods, techniques,
Drexel University CS 451 Software Engineering Winter Yuanfang Cai Room 104, University Crossings
THE SOFTWARE DESIGN PROCESS CSCE 315 – Programming Studio Spring 2010.
Systems Analysis and Design in a Changing World, 3rd Edition
©Ian Sommerville 2006Software Engineering, 8th edition. Chapter 11 Slide 1 Design.
DataBase Management System What is DBMS Purpose of DBMS Data Abstraction Data Definition Language Data Manipulation Language Data Models Data Keys Relationships.
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.
Software Engineering Principles. SE Principles Principles are statements describing desirable properties of the product and process.
1 CMPT 275 High Level Design Phase Modularization.
Software Design: Principles, Process, and Concepts Getting Started with Design.
ECE450 - Software Engineering II1 ECE450 – Software Engineering II Today: Introduction to Software Architecture.
1 CSCD 326 Data Structures I Software Design. 2 The Software Life Cycle 1. Specification 2. Design 3. Risk Analysis 4. Verification 5. Coding 6. Testing.
Lecture 18: Object-Oriented Design
© 2006 Pearson Addison-Wesley. All rights reserved2-1 Chapter 2 Principles of Programming & Software Engineering.
© 2006 Pearson Addison-Wesley. All rights reserved 2-1 Chapter 2 Principles of Programming & Software Engineering.
Software Engineering and Object-Oriented Design Topics: Solutions Modules Key Programming Issues Development Methods Object-Oriented Principles.
111 Subsystems CS 4311 Wirfs Brock et al., Designing Object-Oriented Software, Prentice Hall, (Chapter 7)
Design. Practices Principles Patterns What are the characteristics of good design? What are good solutions to common design problems? How do we go about.
High Quality Code – Style Matters  Design in Construction  Layout and Style Software Construction by Jeff Nogy.
Week 6: Software Design HNDIT Software Engineering Software Design Learning Outcomes  Understand the activities involved in the Design process.
Object Oriented Programming. OOP  The fundamental idea behind object-oriented programming is:  The real world consists of objects. Computer programs.
ITEC0724 Modern Related Technology on Mobile Devices Lecture Notes #2 1.
Class Diagrams. Terms and Concepts A class diagram is a diagram that shows a set of classes, interfaces, and collaborations and their relationships.
Chapter 10 Software quality. This chapter discusses n Some important properties we want our system to have, specifically correctness and maintainability.
Basic Characteristics of Object-Oriented Systems
DESIGN PROCESS AND CONCEPTS. Design process s/w design is an iterative process through which requirements are translated into a “blueprint” for constructing.
Design Engineering 1. Analysis  Design 2 Characteristics of good design 3 The design must implement all of the explicit requirements contained in the.
Design Concepts ch-8
Principles of Programming & Software Engineering
Object Oriented Systems Design
Design in Construction
Design engineering Prepared By:Jay A.Dave..
Lecture 9- Design Concepts and Principles
Principles of Programming and Software Engineering
Software Quality Engineering
Chapter 5 Design in Construction
The Software Design Process
Software Engineering Lecture #8.
Object-Oriented Design
Lecture 9- Design Concepts and Principles
An Introduction to Software Architecture
Producing Production Quality Software
Presentation transcript:

Software Engineering Key design concepts Design heuristics Design practices

Key design concepts Managing complexity: Accidental versus Essential features e.g. Engine is an essential feature in a car, whereas a sound system is an accidental feature Software contains essential and accidental sources of complexity (and hence of difficulties): Minimise essential complexities Eliminate as much as possible of accidental complexities

Key design concepts Managing complexity (cont): Innefective design results from A complex solution to a simple problem A simple, incorrect solution to a complex problem An inappropriate, complex solution to a complex problem

Key design concepts Managing complexity (cont): There are two ways of constructing a software design: one way is to make it so simple that there are obviously no deficiencies, and the other is to make it so complicated that there are no obvious deficiencies. C. A. R. Hoare

Key design concepts Managing complexity is the key to success. It should be regarded as the foundational activity and primary goal in software design. General guidelines can be given for managing complexity. There is no generic formal process to manage complexity.

Key design concepts Desirable characteristics of a design: a good design should balance the following (sometimes competing) characteristics Minimal complexity – simple and easy to understand design is better than clever design. Good design lets you safely ignore most other parts of the program when analysing one specific part

Key design concepts Desirable characteristics of a design: Ease of maintenance – the maintenance programmer should be the target audience of a good design Loose coupling – connections among different parts of a program should be minimised. Loose coupling minimises work during integration, testing and maintenance

Key design concepts Desirable characteristics of a design: Extensibility – the system should admit alterations without needing to change the underlying structure. Most likely changes should cause the least trauma Reusability – pieces of the system being designed should be reusable in other systems

Key design concepts Desirable characteristics of a design: High fan-in – many classes should use a given class. High fan-in implies good use of utility classes at lower levels in the system Low fan-out – each single class should use a low number of other classes (typically, less than seven)

Key design concepts Desirable characteristics of a design: Portability – a system should be designed to be portable Leanness – a system should not have more in it than what is absolutely necessary Stratification – a system should be designed in such way as to allow complete readings at different levels of abstraction

Key design concepts Desirable characteristics of a design: Standard techniques – exotic design and implementation hinders readability and clarity. Standardised, common approaches are better than clever ones

Key design concepts Levels of design: Level 1: software system Consider the system as a whole Level 2: subsystems or packages How to partition system into subsystems How to connect subsystems

Key design concepts Levels of design: Level 2: subsystems or packages (cont) User interfaceGraphics Data storage Application level classes Business rules Enterprise- level tools

Key design concepts Levels of design: Level 2: subsystems or packages (cont) User interfaceGraphics Data storage Application level classes Business rules Enterprise- level tools

Key design concepts Levels of design: Level 2: subsystems or packages (cont) Common subsystems: Business rules User interface Database access System (platform) dependencies

Key design concepts Levels of design: Level 3: division of subsystems into classes Level 4: division of classes into routines Level 5: internal routine design

Design heuristics Find real-world objects: Identify the objects and their attributes Determine what can be done to each object Determine what each object is allowed to do to other objects Determine the parts of each object that will be visible to other objects Define each objects interfaces

Design heuristics Form consistent abstractions: Encapsulate implementation details:

Design heuristics Use inheritance to simplify design Use information hiding to enforce modularisation Hide complexity Hide sources of change so that, when change occurs, effects are localised Identify and isolate areas likely to change

Design heuristics Keep coupling loose: Coupling criteria: Size: few parameters are better than many; few public methods are better than many Visibility: explicit parameter passing is better than access to global variables Flexibility: the more easily other modules can call a module the better

Design heuristics Keep coupling loose: Kinds of coupling: Simple-data-parameter: all data passed between modules are of primitive data types and all data is passed through parameter lists Simple-object: an object instantiates another Object-parameter: one object requires another the passing of a third object Semantic: one module must know the internals of the other coupling

Design heuristics Look for common design patterns Other heuristics Keep intra-module cohesion strong Build hierarchies Formalise class contracts Assign responsibilities to modules Design for test Choose binding time carefully

Design heuristics Other heuristics (cont) Build central points of control Consider using brute force Use diagrams Keep your design modular

Design practices Iterate through candidate designs Divide and conquer Divide and conquer II: incremental refinement Iterate between Top-down and Bottom-up approaches Do experimental prototyping Exercise collaborative design

Design practices Should your design be more detailed? Should it be less detailed? Should your design be more formal? Should it be less formal? Should your design be more documented? Should it be less documented?