CSE403 Software Engineering Autumn 2000 Design (Overview)

Slides:



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

Families of Software Systems Notkin: 3 of 3 lectures on change.
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.
© 2006 Pearson Addison-Wesley. All rights reserved2-1 Chapter 2 Principles of Programming & Software Engineering.
CSE 403 Lecture 5 [Notkin] Software requirements & Software design.
System Design Decomposing the System. Sequence diagram changes UML 2.x specifications tells that Sequence diagrams now support if-conditions, loops and.
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.
CSE 303 – Software Design and Architecture
CSCI-383 Object-Oriented Programming & Design Lecture 1.
Recap (önemli noktaları yinelemek) from last week Paradigm Kay’s Description Intro to Objects Messages / Interconnections Information Hiding Classes Inheritance.
On the Criteria to Be Used in Decomposing Systems into Modules Team 3 Nupur Choudhary Aparna Nanjappa Mark Zeits.
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.
CSE403 Software Engineering Autumn 2001 Design (Information Hiding) Gary Kimura Lecture #8 October 17, 2001.
Some Software Engineering Principles by D. L. Parnas Presented by Team 7: Amitkumar Dhameja Cincy Francis Rong Gu CS575 - Software Design, Team 7.
Chapter 7 Software Engineering Introduction to CS 1 st Semester, 2015 Sanghyun Park.
Design Concepts and Principles Instructor: Dr. Jerry Gao.
Design Concepts By Deepika Chaudhary.
Software Engineering Principles. SE Principles Principles are statements describing desirable properties of the product and process.
© 2006 Pearson Addison-Wesley. All rights reserved 2-1 Chapter 2 Principles of Programming & Software Engineering.
Architecture View Models A model is a complete, simplified description of a system from a particular perspective or viewpoint. There is no single view.
Review of Parnas’ Criteria for Decomposing Systems into Modules Zheng Wang, Yuan Zhang Michigan State University 04/19/2002.
CSCI 3428: Software Engineering Tami Meredith Chapter 6 Designing the Modules.
Design CS 470 – Software Engineering I Sheldon X. Liang, PH.D.
1 Advanced Software Architecture Muhammad Bilal Bashir PhD Scholar (Computer Science) Mohammad Ali Jinnah University.
Wrap up. Structures and views Quality attribute scenarios Achieving quality attributes via tactics Architectural pattern and styles.
Design Engineering 1. Analysis  Design 2 Characteristics of good design 3 The design must implement all of the explicit requirements contained in the.
The Software Lifecycle Stuart Faulk. Definition Software Life Cycle: evolution of a software development effort from concept to retirement Life Cycle.
Principles of Programming & Software Engineering
Software Design.
7. Modular and structured design
Algorithms and Problem Solving
Basic Concepts in Software Design
On the Criteria to Be Used in Decomposing Systems into Modules
Input Space Partition Testing CS 4501 / 6501 Software Testing
which satisfies software requirements
Lecture 9- Design Concepts and Principles
Basic Concepts in Software Design
CS101 Introduction to Computing Lecture 19 Programming Languages
Software Design Mr. Manoj Kumar Kar.
Systems Analysis and Design
Chapter 2 SW Process Models
Lecture 2 of Computer Science II
Design and Maintenance of Web Applications in J2EE
CSC 205 – Java Programming II
Chapter 6 Designing the Modules Shari L. Pfleeger Joanne M. Atlee
Designing and Debugging Batch and Interactive COBOL Programs
Objects First with Java
Objective of This Course
CSE 403, Winter 2003 Software Engineering
CSE 403: Notkin #2 of 3 on software change
Lecture 9- Design Concepts and Principles
Programming Logic and Design Fourth Edition, Comprehensive
An Introduction to Software Architecture
Algorithms and Problem Solving
CSE 331 Software Design & Implementation
CSE403 Software Engineering Autumn 2000 More Testing
Applying Use Cases (Chapters 25,26)
CSE403 Software Engineering Autumn 2000 Design (Information Hiding)
Design Yaodong Bi.
CS 2704 Object Oriented Software Design and Construction
Information Hidding Dr. Veton Kepuska.
On a “Buzzword” Hierarchical Structure
Software Design Lecture : 6
Chapter 8 - Design Strategies
From Use Cases to Implementation
Jim Fawcett CSE687 – Object Oriented Design Spring 2015
Presentation transcript:

CSE403 Software Engineering Autumn 2000 Design (Overview) CSE 403 Autumn 2000 CSE403 Software Engineering Autumn 2000 Design (Overview) Gary Kimura Lecture #7 October 9, 2000 October 9, 2000

Today ( Understand the basic principles underlying software design) Keep in mind where these ideas can help guide you in your project design Modularization Coupling Cohesion Understand that the driving force behind design is managing complexity Provides a basis for studying information hiding, layering, patterns, etc.

But, first an aside regarding the project Can it be written in C or C++ Either language is fine, provided the heap code itself does not use the normal runtime heap The testing and performance programs can use the runtime heap to help them build necessary structures to test the new heap A chicken and egg problem The heap itself must recursively get its own memory. Beware of deadlocks Beware of logic that needs to allocate memory in-order to allocate memory

What is design? The activity that leads from requirements to implementation A description that represents a key aspect of this activity If the requirements are the “what” the design (with an associated implementation) is the “how”

Design space There are many designs that satisfy a given set of requirements There are also many designs that may at first appear to satisfy the requirements, but don’t on further study Collectively, these form a design space A designer walks this space evaluating designs

Design: managing complexity Of course, this design space isn’t just sitting out there for you to search like a library catalog or the WWW You must also generate the designs A key aspect of design generation is understanding that the goal is to achieve the requirements in the face of the limitations of the human mind and the need for teams to develop products

An aside From “Programming considered as a human activity” by Dijkstra “The technique of mastering complexity has been known since ancient times: Divide et impera (Divide and rule). … I assume the programmer’s genius matches the difficulty of his problem and assume that he has a arrived at a suitable subdivision of the task.” This final assumption is troubling! It’s a big part of the job of software design! Experience will be your best ally in proposing and judging designs

Decomposition Design is largely a process of finding decompositions that help humans manage the complexity Understand that the design satisfies the requirements Allow relatively independent progress of team members Support later changes effectively Not all decompositions are equally good! In the User Mode Heap there are many ways to decompose the problem

Decompositions A decomposition specifies a set of components (modules) and the interactions among those modules It is often the case that the components are related to parts of an object model The degree of detail in the specification varies

Aside: Composition Decomposition Composition The classic view of design Given a fixed set of requirements, what decomposition is best? Composition An increasingly common view of design Given a set of available components, what design that exploits them is best? Are there slightly different requirements that are easier to achieve given those components? Experience will lead you to blending these two

Comparing designs Not all decompositions are equally good So, on what basis do we compare and contrast them? Indeed, on what basis do we even generate them? Parnas said: “Usually nothing is said about the criteria to be used in dividing the system into modules.”

How to compare and contrast decompositions Coupling and cohesion Given a decomposition of a system into modules, one can partially assess the design in terms of cohesion and coupling Loosely, cohesion assesses why the elements are grouped together in a module Loosely, coupling assesses the kind and quantity of interconnections among modules

Kinds of cohesion Elements can be placed together to provide an abstract data type if they are all executed about the same time (say, during initialization or termination) because they will be assigned to a single person because they start with the same letter because...

“Good” vs. “bad” cohesion Bergland talks about different levels of cohesion Best: functional, where the elements collectively provide a specific behavior or related behaviors Worst: coincidental, where the elements are collected for no reason at all Many other levels in between Cohesion is not measurable quantitatively

Coupling Coupling assesses the interactions between modules It is important to distinguish kind and strength kind: A calls B, C inherits from D, etc. And directionality strength: the number of interactions

“Good” vs. “bad” coupling Modules that are loosely coupled (or uncoupled) are better than those that are tightly coupled Why? Because of the objective of modules to help with human limitations The more tightly coupled are two modules, the harder it is to think about them separately, and thus the benefits become more limited

How to assess coupling? Kinds of interconnections Strengths of interconnections There are lots of approaches to quantitatively measuring coupling They are not broadly used in industry More used in reengineering than forward engineering They are beyond the scope of this class

What kind (of relations)? There are many kinds of interconnections (relations) to consider calls, invokes, accesses, … how about invokes in an OO language using dynamic dispatch? others? Question: how many different relations are there among components of a software system?

names vs. invokes Here is an example of a mix of relations Module A registers interest with an event that B can announce When B announces that event, a function in A is invoked A knows the name of B, but B doesn’t know the name of A

Hierarchical designs Loose coupling is often associated with hierarchical designs They also tend to arise from repeated refinements of a design Hierarchies are often more coupled than they appear, because of other relations

Strength of interconnection Q: does a module that relies on an ADT module have stronger interconnection if it makes calls to all the exported methods (as opposed to only a couple of them)? Q: what if it calls one or two methods, but it calls them millions of times each? Q: what if it has more kinds of relations with that module?

Complexity A design with really complex modules is worse than a design with simpler modules Complexity is brutally hard to measure Correctness

Correspondence How closely does it map to the requirements specification? This is critical to evolution! Use a single module? Great cohesion! No coupling! Where’s the failure?

Coupling and cohesion, and next time These are just guidelines Again, they don’t by themselves give criteria for modular decomposition Next time Design Information Hiding Design reviews