Software Design Fundamentals

Slides:



Advertisements
Similar presentations
Lecture 6: Software Design (Part I)
Advertisements

ARCHITECTURES FOR ARTIFICIAL INTELLIGENCE SYSTEMS
Ch:8 Design Concepts S.W Design should have following quality attribute: Functionality Usability Reliability Performance Supportability (extensibility,
Design Concepts and Principles
Chapter 13 Design Concepts and Principles
Design Phase What’s design?
1 These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 5/e and are provided with permission by.
Design Concepts And Principles Software Design -- An iterative process transforming requirements into a “blueprint” for constructing the software.
TCS2411 Software Engineering1 Software Design Principles “Producing the software blueprint”
Software Design Deriving a solution which satisfies software requirements.
Software Architecture Design Instructor: Dr. Jerry Gao.
Requirements Analysis Concepts & Principles
Software Engineering CSE470: Systems Engineering 35 Computer System Engineering Computer System Engineering is a problem-solving activity. Itemize desired.
What is Software Architecture?
Chapter 10 Architectural Design
Design Concepts "You can use an eraser on the drafting table or a sledge hammer on the construction site." Frank Lloyd Wright.
CSE 303 – Software Design and Architecture
Design Issues Practice: A generic View Design Principles.
Chapter 9 Design Engineering
 2004 by SEC Chapter 4 Software Design. 2  2004 by SEC Chapter 4 Software Design 4.1 Design Fundamentals 4.2 Design Method 4.3 Architecture Design
SOFTWARE DESIGN (SWD) Instructor: Dr. Hany H. Ammar
SOFTWARE DESIGN.
SOFTWARE DESIGN Design Concepts Design is a meaningful engineering representation of something that is to be built It can be traced to a customer’s requirements.
Design engineering Vilnius The goal of design engineering is to produce a model that exhibits: firmness – a program should not have bugs that inhibit.
CSEB233: Fundamentals of Software Engineering Software Design.
Drexel University CS 451 Software Engineering Winter Yuanfang Cai Room 104, University Crossings
Chapter : Design Engineering. Design Engineering It covers the set of principles, concepts, and practices that lead to the development of a high quality.
Design Concepts and Principles Instructor: Dr. Jerry Gao.
©Ian Sommerville 2006Software Engineering, 8th edition. Chapter 11 Slide 1 Design.
Chapter 13 Design Concepts and Principles Software Engineering: A Practitioner's Approach, 5/e.
SOFTWARE DESIGN AND ARCHITECTURE LECTURE 05. Review Software design methods Design Paradigms Typical Design Trade-offs.
SIM3302 SOFTWARE DESIGN & TESTING
1 These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 5/e and are provided with permission by.
Design Concepts By Deepika Chaudhary.
These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 6/e and are provided with permission by.
Computing and SE II Chapter 9: Design Methods and Design Models Er-Yu Ding Software Institute, NJU.
SOFTWARE DESIGN. INTRODUCTION There are 3 distinct types of activities in design 1.External design 2.Architectural design 3.Detailed design Architectural.
Software Design: Principles, Process, and Concepts Getting Started with Design.
Developed by Reneta Barneva, SUNY Fredonia Software Design and Software Engineering.
Software Design Process
1 These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 5/e and are provided with permission by.
Dr D. Greer, Queens University Belfast )Chapter Six 1 Software Engineering Chapter Six Software Design Quality Learning Outcomes.
1 Software Engineering: A Practitioner’s Approach, 6/e Chapter 9: Design Engineering Software Engineering: A Practitioner’s Approach, 6/e Chapter.
CSE 303 – Software Design and Architecture
The Software Development Life Cycle: An Overview
1 These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 5/e and are provided with permission by.
Chapter : 8 Design Concepts
February 19, February 19, 2016February 19, 2016February 19, 2016 Azusa, CA Sheldon X. Liang Ph. D. Software Engineering in CS at APU Azusa Pacific.
Software Design. Introduction Designing engineering encompasses the set of principles concepts and practices that lead to the development of a high quality.
Architectural Complexity  A useful technique for assessing the overall complexity of a proposed architecture is to consider dependencies between components.
DESIGN PROCESS AND CONCEPTS. Design process s/w design is an iterative process through which requirements are translated into a “blueprint” for constructing.
SOFTWARE DESIGN & SOFTWARE ENGINEERING Software design is a process in which data, program structure, interface and their details are represented by well.
Design Engineering 1. Analysis  Design 2 Characteristics of good design 3 The design must implement all of the explicit requirements contained in the.
These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 6/e and are provided with permission by.
Design Concepts ch-8
Software Design.
CompSci 280 S Introduction to Software Development
Software Design Principles
Design engineering Prepared By:Jay A.Dave..
Lecture 9- Design Concepts and Principles
Software Design Mr. Manoj Kumar Kar.
Software Quality Engineering
CIS 375 Bruce R. Maxim UM-Dearborn
Chapter 5 Designing the Architecture Shari L. Pfleeger Joanne M. Atlee
Lecture 9- Design Concepts and Principles
Chapter 9 Design Engineering
Design Engineering.
Introduction to Systems Analysis and Design Stefano Moshi Memorial University College System Analysis & Design BIT
Software Modelling and Design
DESIGN CONCEPTS AND PRINCIPLES
Presentation transcript:

Software Design Fundamentals Introduction Design Principles SEN-261 : Software Engineering Tazeen Muzammil

S/W Design Fundamentals Software Design General definition of design “… the process of applying various techniques and principles for the purpose of defining a device, a process, or a system in sufficient detail to permit its physical realization.” Goal: To produce a model or representation that will later be built Major Areas of concern: Data Design Architecture Design Interfaces Design Components Design S/W Design Fundamentals

Design and Software Quality Design is the place where quality is fostered in software engineering. Design provides us with representation of software that can be assessed for quality. Design is the only way we can translate customers requirements into finished software product or system. Software design serves as the foundation for all the software engineering and software support steps. S/W Design Fundamentals

Characteristics of a Good Design The design must implement all of the explicit requirements contained in the analysis model, and it must accommodate all of the implicit requirements desired by the customer. The design must be readable, understandable guide for those who generate code and for those who test and support the software. The design should provide a complete picture of the software, addressing the data, functional and behavioral domains from an implementation prespective. S/W Design Fundamentals

General Design Guidelines A design should exhibit architectural structure that 1) has been created using recognizable design patterns, 2) is composed of components that exhibit good design characteristics 3) and can be implemented in an evolutionary fashion. Logically partitioned into components that perform specific tasks and subtasks. Lead to interfaces that reduce complexity of connections between modules and with the external environment. Derived using a repeatable method driven by information gathered during requirements. Lead to data structures that are appropriate for the objects to be implemented. S/W Design Fundamentals

S/W Design Fundamentals Design Principles Design process should not suffer from tunnel vision Design should be traceable to the analysis model Design should not reinvent the wheel Design should exhibit uniformity and integration Design should be structured to accommodate change Design is not coding and coding is not design Design should be reviewed to minimize conceptual errors A good designer should consider alternative approaches, judging on the requirements of the problem, the resources available to do the job and the design concepts. Because a single element of the design model often traces to multiple requirements, it is necessary to have a mean for tracking how requirements have been satisfied by the design. Time is short and resources are limited. Deign time should be invested in representing new ideas and integrating those patterns that already exist. Rules of style and format should be defined for a design team before design work begins. The design is integrated if care is taken in defining interfaces between design components. - The only design decisions made at the coding level address the small implementation details that enable the procedural design to be coded. A design team should ensure that major conceptual elements of the design (omission, ambiguity, inconsistency) have been addressed before worrying about the syntax of the design model. S/W Design Fundamentals

Software Design Model Functional model Information model Data design Behavioral model Architectural design Design Interface design Code Other requirements Integrated & validated software Program modules Test Procedural/ Component-level design S/W Design Fundamentals

S/W Design Fundamentals Data Design The primary activity during data design is to select logical representations of data objects identified during the requirements definition and specification phase. The selection process may involve algorithmic analysis of alternative structures in order to determine the most efficient design or may simply involve the use of a set of modules that provide the operations upon some representation of an object. [Wasserman] Data design transforms the information domain model created during analysis into the data structures that will be required to implement the software. The data objects and relationships defined in ERD and the detailed data content depicted in the data dictionary provide the basis for the data design activities. Data Specification Principles Identify all data structures and associated operations Establish a data dictionary to define data & program design Representation of data structure should only be known to modules with direct use of data within the structure Develop a library of useful data structures Language should support abstract data types S/W Design Fundamentals

S/W Design Fundamentals Architectural Design Objective is to develop a modular program structure and represent the control relationships between modules Derived from the system specification, the analysis model, and the interaction of subsystems defined within the analysis model. S/W Design Fundamentals

S/W Design Fundamentals Interface Design Combines program and data structure by defining interfaces that allows data to flow throughout the program The interface design describes how the software communicates within itself, with systems that interoperate with it and with humans who use it. Data and control flow diagrams provides information required for interface design S/W Design Fundamentals

Procedural Design Transforms structural elements of the software architecture into a procedural description of software components. After data & program structure have been established, it becomes necessary to specify procedural detail without ambiguity Information from process specification, control specification and STD serve as the basis for component design. Design Notations Structured programming Graphical design notation Tabular design notation Program design language (PDL) Structured Programming Three constructs - (sequence, condition, repetition) with predictable structure Limit procedural design to small number of operations Takes advantage of chunking to enhance readability, testability, human understanding Flow-charts (draw sequence, if-then, selection, repetition) Can get overly complex by relying only on structured constructs Box diagrams (draw sequence, if-then-else, repetition, selection) Tabular Design Decision table (rules, conditions, actions, T/F, X marks action) PDL pseudocode (keywords, free syntax of natural language, subprogram definition)

Software Design Fundamentals “The beginning of wisdom for a computer programmer is to recognize the difference between getting a program to work, and getting it right.” [Jackson] Abstraction Refinement Modularity Software Architecture Control Hierarchy Data Structure Software Procedure Information Hiding S/W Design Fundamentals

S/W Design Fundamentals Abstraction Is one of the fundamental ways that can be used to cope with complexity. Levels of detail/language used to describe a problem Highest level Lower level Lowest level Types: Procedural abstraction Data abstraction Control abstraction Highest Level - solution stated in broad terms using the language of the problem environment Lower Levels - more procedural, process oriented terminology coupled with implementation oriented terminology in an effort to state a solution Lowest Level - stated in a manner that can be directly implemented Procedural Abstraction - named sequence of instructions that has a limited and specific function (Open door eg: walk to the door, reach out and grasp knob, turn knob and pull door etc) Data named collection of data that describes a data object (Door eg: door type, swing direction, weight, dimension) Control Abstraction - implies a program control mechanism without specifying internal detail. Example: Synchronization semaphore to coordinate activities in an operating system. The psychological notion of “abstraction” permits one to concentrate on a problem at some level of generalization without regard to irrelevant low level details; use of abstraction also permits one to work with concepts and terms that are familiar in the problem environment… [Wasserman] S/W Design Fundamentals

Design Fundamentals (cont.) Refinement Top-down strategy Abstraction and Refinement are complimentary In each step, one or several instructions of the given program are decomposed into more detailed instructions. This successive decomposition or refinement of specification terminates when all instructions are expressed in terms of any underlying computer or programming language. [Wirth] Refinement: - successive refinement of levels of procedural detail; - develop hierarchy by decomposing a procedural abstraction in a stepwise fashion until programming language statements are reached - process of elaboration, forces designer to elaborate on original statement, providing more detail with each successive refinement S/W Design Fundamentals

Design Fundamentals (cont.) Modularity Divide software into separate components often called modules that are integrated to solve problem requirements Criteria to evaluate the Design methods Modularity Decomposability Modular Composability Modular Understandability Modular Continuity Modular Protection Modularity: - single attribute of software that allows a program to be intellectually manageable - effort and perceived effort of larger task is greater than individual pieces - divide and conquer - easier to solve when broken down into pieces S/W Design Fundamentals

Design Fundamentals (cont.) Software Architecture The hierarchical structure of program components, the manner in which these components interact and & the structure of data that are used by the components. Properties of an architectural design Structural properties Defines the components of the system, and the manner in which those components are packaged and interact with one another. Extra-functional properties Should address how the design architecture achieves requirements for performance, capacity, reliability, security, adaptability and other system characteristics. Families of related properties Identify the repeatable patterns that are commonly encountered in the design of similar system. The design should have the ability to reuse architectural building blocks. Architecture Components can be generalized to represent major system elements and their interactions - derived through partitioning process that relates elements of a software solution to parts of a real-world problem - different design methods and problem domains produce different architectures - which is best? We can’t answer that, but we can measure certain characteristics of quality structures S/W Design Fundamentals

Design Fundamentals (cont.) Control Hierarchy/Program Structure Organization of modules that implies a hierarchy of control Depth, width, fan-out, fan-in - Tree like control diagram Control Hierarchy - Depth = number of levels of control - Width = Overall span of control - Fan Out = # of modules directly controlled - Fan In = how many modules directly control a module Visibility - the set of program component s that may be invoked or used as data by a given component, even if indirectly Connectivity - the set of components directly invoked or used S/W Design Fundamentals

Design Fundamentals (cont.) Data Structure Logical representation of the relationship among individual data elements Scalar, vector, array, linked list, stacks etc Software Procedure Processing details of each module Precise specification includes sequence of events, decision points, repetitive operations, data organization Software Procedure - flow chart type stuff S/W Design Fundamentals

Design Fundamentals (cont.) Information Hiding Modules should be “characterized by design decisions that each hides from all others” Modules are designed so that information within a module is inaccessible to other modules with no need for the information Defines and enforces access constraints Information Hiding - of greatest benefit when modifications are required (during testing & maintenance); less propagation of errors (5 Minutes) Discussion Topic: What are some benefits of modular design? S/W Design Fundamentals

S/W Design Fundamentals Modular Design Benefits Reduces complexity Facilitates change Easier to develop Easier to maintain and test Easier implementation afforded by parallel development “single-minded” function and “aversion” to excessive interaction with other modules Easier to develop function is compartmentalized interfaces are simplified Easier to maintain & test secondary/side effects due to design/code modification are limited reduces error propagation reusable modules supported S/W Design Fundamentals

Functional Independence Design software so that each module addresses a specific sub-function of requirements and has a simple interface when viewed from other parts of the program structure Benefits Easier to develop Easier to maintain & test Measures of Independence Cohesion measure of relative functional strength of a module a cohesive module should (ideally) do just one thing/single task Coupling measure of the relative interdependence among modules S/W Design Fundamentals