Software Design Chapter 11. Purposes of Design Design transforms the specification into a design. The end purpose of the design is to produce detail and.

Slides:



Advertisements
Similar presentations
Understand and appreciate Object Oriented Programming (OOP) Objects are self-contained modules or subroutines that contain data as well as the functions.
Advertisements

Software Engineering Key design concepts Design heuristics Design practices.
Ch:8 Design Concepts S.W Design should have following quality attribute: Functionality Usability Reliability Performance Supportability (extensibility,
Chapter 10: The Traditional Approach to Design
SOFTWARE TESTING. INTRODUCTION  Software Testing is the process of executing a program or system with the intent of finding errors.  It involves any.
1 Software Testing and Quality Assurance Lecture 13 - Planning for Testing (Chapter 3, A Practical Guide to Testing Object- Oriented Software)
CIS-74 Computer Software Quality Assurance Systematic Software Testing Chapter 1: An Overview of the Testing Process.
1 Software Design Introduction  The chapter will address the following questions:  How do you factor a program into manageable program modules that can.
Traditional Approach to Design
Chapter 10 The Traditional Approach to Design
Chapter 9: The Traditional Approach to Design Chapter 10 Systems Analysis and Design in a Changing World, 3 rd Edition.
What is Software Design?  Introduction  Software design consists of two components, modular design and packaging.  Modular design is the decomposition.
Copyright Irwin/McGraw-Hill Software Design Prepared by Kevin C. Dittman for Systems Analysis & Design Methods 4ed by J. L. Whitten & L. D. Bentley.
API Design CPSC 315 – Programming Studio Fall 2008 Follows Kernighan and Pike, The Practice of Programming and Joshua Bloch’s Library-Centric Software.
1 CS 501 Spring 2003 CS 501: Software Engineering Lecture 2 Software Processes.
The Unified Software Development Process - Workflows Ivar Jacobson, Grady Booch, James Rumbaugh Addison Wesley, 1999.
Algorithms and Problem Solving-1 Algorithms and Problem Solving.
Algorithms and Problem Solving. Learn about problem solving skills Explore the algorithmic approach for problem solving Learn about algorithm development.
Design The goal is to design a modular solution, using the techniques of: Decomposition Abstraction Encapsulation In Object Oriented Programming this is.
Design - Architecture CS-300 Fall 2005 Supreeth Venkataraman.
Modules, Hierarchy Charts, and Documentation
Chapter 1 Program Design
© 2006 Pearson Addison-Wesley. All rights reserved2-1 Chapter 2 Principles of Programming & Software Engineering.
Course Instructor: Aisha Azeem
Introduction to Software Design Chapter 1. Chapter 1: Introduction to Software Design2 Chapter Objectives To become familiar with the software challenge.
C++ fundamentals.
Dr. Ken Hoganson, © August 2014 Programming in R STAT8030 Programming in R COURSE NOTES 1: Hoganson Programming Languages.
Chapter 5CSA 217 Design in Construction Chapter 5 1.
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.
1 CMPT 275 High Level Design Phase Architecture. Janice Regan, Objectives of Design  The design phase takes the results of the requirements analysis.
An Introduction to Software Architecture
CSC 395 – Software Engineering Lecture 12: Reusability –or– Programming was Bjarne Again.
SOFTWARE DESIGN.
Chapter 9 Moving to Design
10 ITK261 The traditional approach to design Reading: Chapter 10 Oct 9, 11.
1 Software Design Overview Reference: Software Engineering, by Ian Sommerville, Ch. 12 & 13.
SE: CHAPTER 7 Writing The Program
Introduction CS 3358 Data Structures. What is Computer Science? Computer Science is the study of algorithms, including their  Formal and mathematical.
Systems Analysis and Design in a Changing World, 3rd Edition
CE Operating Systems Lecture 3 Overview of OS functions and structure.
Design Concepts By Deepika Chaudhary.
CS Data Structures I Chapter 2 Principles of Programming & Software Engineering.
CCSB223/SAD/CHAPTER131 Chapter 13 Designing the System Internals.
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.
1 CS 501 Spring 2004 CS 501: Software Engineering Lecture 2 Software Processes.
ECE450 - Software Engineering II1 ECE450 – Software Engineering II Today: Introduction to Software Architecture.
The Software Development Process
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.
CSCI 1100/1202 April 1-3, Program Development The creation of software involves four basic activities: –establishing the requirements –creating.
© 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.
Design Reuse Earlier we have covered the re-usable Architectural Styles as design patterns for High-Level Design. At mid-level and low-level, design patterns.
Software Engineering and Object-Oriented Design Topics: Solutions Modules Key Programming Issues Development Methods Object-Oriented Principles.
Review of Parnas’ Criteria for Decomposing Systems into Modules Zheng Wang, Yuan Zhang Michigan State University 04/19/2002.
Software Engineering Issues Software Engineering Concepts System Specifications Procedural Design Object-Oriented Design System Testing.
CSI 1340 Introduction to Computer Science II Chapter 1 Software Engineering Principles.
©Ian Sommerville 2006Software Engineering, 8th edition. Chapter 4 Slide 1 Software Processes.
Lecture VIII: Software Architecture
Program Design. Simple Program Design, Fourth Edition Chapter 1 2 Objectives In this chapter you will be able to: Describe the steps in the program development.
Algorithms and Problem Solving. Learn about problem solving skills Explore the algorithmic approach for problem solving Learn about algorithm development.
SOFTWARE DESIGN & SOFTWARE ENGINEERING Software design is a process in which data, program structure, interface and their details are represented by well.
Systems Analysis and Design in a Changing World, Fourth Edition
Design Concepts ch-8
Advanced Computer Systems
CompSci 280 S Introduction to Software Development
Algorithms and Problem Solving
An Introduction to Software Architecture
Algorithms and Problem Solving
Overview Activities from additional UP disciplines are needed to bring a system into being Implementation Testing Deployment Configuration and change management.
Presentation transcript:

Software Design Chapter 11

Purposes of Design Design transforms the specification into a design. The end purpose of the design is to produce detail and information suitable for the coding activity. The end-user of the design are coders and sometimes testers.

What Is a Design? A design is a specification of the software organization and methods. Specifically, we can think of these things as the software architecture, data structures and algorithms In addition, a design provides the framework for partitioning the requirements into “subsystems”.

General Design Ideas The design activity adds another layer of “focus” in our “fuzzy into focus” strategy of software development. During design, we actively assign the responsibility for fulfilling the individual requirements to subsystems: systems within the actual system Ultimately, we need to end up with “units” of work that can be parceled out to the code-smiths (programmers).

Iterative Enhancement The notion behind iterative enhancement is simple: design complex system as a simple system. Then, “enhance” the system to systematically add the complexity. By doing this iteratively, the each component of the complexity is added independently, which the the idea of dealing with “independent parts” as a strategy for handling complexity.

Step-wise Refinement Step-wise refinement differs from interative enhancement in that complexity should be ignored until an appropriate level of detail is acheieve. In short, details of complexity should be pushed down into the details where the problem can be subdivided and the complexity can be look at as it relates to each of the individual subsystems.

Information Hiding In a nutshell, information hiding can be though of as a “need to know” approach to data and algorithms. Only code or modules that really need to know how data is manipulated (algorithms) or how it is represented (data structures) should have visibility. Why? This approach helps prevent designers from designing in dependencies on data implementation.

Adding to the Test Plan in Design During design, the test plan can (and should) be updated to include strategies for the execution of tests to exercise the actual design. In addition, in some testing strategies, tests can be updated to test individual subsystems hidden from the outside view.

The Designer's Art The designer acquires experience as time goes on. Very seldom is the “art” actually codified, but there are some fundamental rules and notions that can be taken advantage of, but these rules are not foolproof, nor are they a substitute for training, thought and good judgment!

By Engineers for Engineers The design is written by engineers for engineers. Because of this, the design can use jargon, notation methods and design techniques that are alien to the end user. This allows for succinct representation of design using notation that has evolved expressly for that purpose.

From Requirements to Design. The first part of the design (system architecture) is fuzzier that the later parts (subsystem and module specifications). Typically, we divide the design activity up into these two areas: “architecture: and “detailed design.” For system architecture, remember the Bauhaus concept: “Form follows function!”

Common, Needed Functions It’s often helpful to identify common funtions early, such as sting handling functions. Common functions are functions that needed by more than one subsystem or module. Early identification allows us to prevent multiple implementation of the same function. This would destroy our system’s “cohesion”.

Major Data Structures Major data structures fall into two camps: Permanent and temporary. The permanent data structures are the data structures (such as global data) that will persist for the entire duration of the system activity. The temporary data may be common data structures that are used to pass information between routines (such as parameter lists) that will be discarded after it has served its functions.

Major Algorithms The major algorithms are the algorithms that ‘do the work’ of the system. For a payroll system, an algorithm that computes withholding for taxes is clearly a major algorithm. There can be multiple functions that involve major algorithms: if the payroll system is for international use, the withholding algorithm would probably be different for each country! We need to know we will have to handle that somehow.

High-level (“Architectural”) Design Architecture is usually the product of the designer’s experience. After building printer firmware for several years, a designer would call upon experience of previous printer systems to build the next. However, in the face of no experience, how is it done? Many design methods (FSM, OOD and Dataflow-diagrams) can “automatically” generate an architecture without any previous experience. Note that this architecture may not be optimal, but is almost always quite suitable and understandable

Designing Major Subsystems Major subsystems lend themselves the the previous principles: they can almost always be designed using the same techniques used at the system level. These techniques are to identify the inputs, outputs, major algorithms, data structures, etc.

Traceability Matrices Tracability Matrices allow us to track the partitioning of the requirements into the individual subsystems. In addition, these matrices allow us to find which requirements are fulfilled by each subsystem. Remember, a single requirement may be assigned to more than one subsystem!

Subsystem Interfaces In general, it is best to minimize the number of interfaces to each subsystems. This can help reduce “coupling”, but not always. At least it can localize coupling problems to select location. Subsystem interface should always, in the author’s opinion, return a success/failure code.

Environment Interface In addition to subsystems, the “environment” has an interface, sometimes beyond our immediate control. An example of the “environment” interface would be operating system calls, calls to an off-the-shelf library (such as a string handling library and so on.)

Detailed Design “Detailed Design” is essentially the decomposition of subsystems into “work packages” for the code-smiths (programmers). This activity focuses on the final step of decomposition, but still leave room for the code-smith’s art: it stops short of code itself!

Decomposition of Subsystems into Modules Decomposition into modules implies that the assigned requirements must also be allocated to the individual modules. Traceability matrices come into play here as well. Again, we identify and specify the major subsystems (in this case, each subsystem is a module) and interfaces.

Designing Major Modules of a Subsystem Verb-noun combinations are useful for identifying module functions (“determine_temperature”, etc.) Support functions (sometimes call “utility functions”) that are unique to this particular subsystem are also candidates for modules.

Defining Module Interfaces Module interfaces are essentially of two types: internal and external. Visibility of the internal interfaces are unique to the module itself: this is the idea of information hiding. Most modern programming languages have features that support this. External interfaces should be limited to expose only the functionality that is required by the rest of the subsystem or system.

Specifying the Module Functions Usually module functions can be easily specified: public function names, input parameters, output parameters, and error codes. Occasionally, which a ticklish or unique algorithm is needed, it can be specified using “pseudocode”. Be careful not to over specify: the code-smiths have skill sets that will be brought to bear that add value. We often gain little or nothing by over- specifying modules.

Module Documentation The documentation for the modules will vary from group to group, but should as a minimum include: – Name of the module. –Description of parameters. –Name of the file the module source code resides in. –Error conditions and codes returned by the module.