Families of Software Systems Notkin: 3 of 3 lectures on change.

Slides:



Advertisements
Similar presentations
Structured Design The Structured Design Approach (also called Layered Approach) focuses on the conceptual and physical level. As discussed earlier: Conceptual.
Advertisements

Ch:8 Design Concepts S.W Design should have following quality attribute: Functionality Usability Reliability Performance Supportability (extensibility,
COMPSCI 105 S Principles of Computer Science 12 Abstract Data Type.
The design process IACT 403 IACT 931 CSCI 324 Human Computer Interface Lecturer:Gene Awyzio Room:3.117 Phone:
CS 211 Inheritance AAA.
Classes and Object- Oriented... tMyn1 Classes and Object-Oriented Programming The essence of object-oriented programming is that you write programs in.
CS 345 Computer System Overview
Assurance through Enhanced Design Methodology Orlando, FL 5 December 2012 Nirav Davé SRI International This effort is sponsored by the Defense Advanced.
June 13, Introduction to CS II Data Structures Hongwei Xi Comp. Sci. Dept. Boston University.
1 ) Definition 2) Note on structured and modular programming, and information hiding 3) Example imperative languages 4) Features of imperative languages.
Designing Software for Ease of Extension and Contraction
Slide 3-1 Copyright © 2004 Pearson Education, Inc. Operating Systems: A Modern Perspective, Chapter 3 Operating System Organization.
Computer Science 240 Principles of Software Design.
C++ fundamentals.
CSCI-383 Object-Oriented Programming & Design Lecture 15.
Week 4 MondayTuesdayWednesdayThursdayFriday Composition Reading III due Group meetings Phil Kimmey on using rover.com SDS++ due Midterm review –
The design process z Software engineering and the design process for interactive systems z Standards and guidelines as design rules z Usability engineering.
Designing Software for Ease of Extension and Contraction Presented by William Greenwell February 27, 2002.
© 2009 Matthew J. Sottile, Timothy G. Mattson, and Craig E Rasmussen 1 Concurrency in Programming Languages Matthew J. Sottile Timothy G. Mattson Craig.
Introduction and Overview Questions answered in this lecture: What is an operating system? How have operating systems evolved? Why study operating systems?
CSE 303 – Software Design and Architecture
G53SEC 1 Reference Monitors Enforcement of Access Control.
Architectural Design portions ©Ian Sommerville 1995 Establishing the overall structure of a software system.
CS 325: Software Engineering March 17, 2015 Applying Patterns (Part A) The Façade Pattern The Adapter Pattern Interfaces & Implementations The Strategy.
Intro to Architecture – Page 1 of 22CSCI 4717 – Computer Architecture CSCI 4717/5717 Computer Architecture Topic: Introduction Reading: Chapter 1.
SOFTWARE DESIGN AND ARCHITECTURE LECTURE 07. Review Architectural Representation – Using UML – Using ADL.
CSE403 Software Engineering Autumn 2001 Design (Information Hiding) Gary Kimura Lecture #8 October 17, 2001.
1 SWE Introduction to Software Engineering Lecture 4.
CSE403 ● Software engineering ● sp12 Week 7-10 MondayTuesdayWednesdayThursdayFriday Joel test & interviewing No reading GroupsReviewsSectionProgress report.
CE Operating Systems Lecture 3 Overview of OS functions and structure.
Computers Operating System Essentials. Operating Systems PROGRAM HARDWARE OPERATING SYSTEM.
Operating System What is an Operating System? A program that acts as an intermediary between a user of a computer and the computer hardware. An operating.
G53SEC 1 Reference Monitors Enforcement of Access Control.
Software Engineering Principles. SE Principles Principles are statements describing desirable properties of the product and process.
Writing Systems Software in a Functional Language An Experience Report Iavor Diatchki, Thomas Hallgren, Mark Jones, Rebekah Leslie, Andrew Tolmach.
Chapter 1: Introduction and History  Where does the operating system fit in a computing system?  What does the operating system achieve?  What are the.
OSes: 3. OS Structs 1 Operating Systems v Objectives –summarise OSes from several perspectives Certificate Program in Software Development CSE-TC and CSIM,
SOFTWARE DESIGN. INTRODUCTION There are 3 distinct types of activities in design 1.External design 2.Architectural design 3.Detailed design Architectural.
CS 346 – Chapter 2 OS services –OS user interface –System calls –System programs How to make an OS –Implementation –Structure –Virtual machines Commitment.
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.
Introduction to c++ programming - object oriented programming concepts - Structured Vs OOP. Classes and objects - class definition - Objects - class scope.
The Nature of Computing INEL 4206 – Microprocessors Lecture 2 Bienvenido Vélez Ph. D. School of Engineering University of Puerto Rico - Mayagüez.
Human Computer Interaction
A. Frank - P. Weisberg Operating Systems Structure of Operating Systems.
CS 350 – Software Design Expanding Our Horizons – Chapter 8 The traditional view of objects is that they are data with methods. Sometimes objects could.
Final Review. From ArrayLists to Arrays The ArrayList : used to organize a list of objects –It is a class in the Java API –the ArrayList class uses an.
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.
1 Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L 9.1 – 9.4.
Copyright © Curt Hill Operating Systems An Introductory Overview.
Chapter 1 Basic Concepts of Operating Systems Introduction Software A program is a sequence of instructions that enables the computer to carry.
1  2004 Morgan Kaufmann Publishers Locality A principle that makes having a memory hierarchy a good idea If an item is referenced, temporal locality:
CENG334 Introduction to Operating Systems 1 Erol Sahin Dept of Computer Eng. Middle East Technical University Ankara, TURKEY URL:
CSCE 240 – Intro to Software Engineering Lecture 3.
DESIGN PROCESS AND CONCEPTS. Design process s/w design is an iterative process through which requirements are translated into a “blueprint” for constructing.
1 Chapter 2: Operating-System Structures Services Interface provided to users & programmers –System calls (programmer access) –User level access to system.
CSCI 383 Object-Oriented Programming & Design Lecture 15 Martin van Bommel.
CompSci 143A1 1. Introduction 1.1 The Role of Operating Systems - Bridge the “Semantic Gap” between Hardware and Application - Three Views of Operating.
Computer System Structures
Module 3: Operating-System Structures
Kernel Design & Implementation
Operating System Structure
Operating System Structure
Software Quality Engineering
CSE 403: Notkin #2 of 3 on software change
CSE403 Software Engineering Autumn 2000 Design (Overview)
Software Fundamentals
Chapter 2: Operating-System Structures
Paper by D.L Parnas And D.P.Siewiorek Prepared by Xi Chen May 16,2003
CSE403 Software Engineering Autumn 2000 Design (Information Hiding)
Chapter 2: Operating-System Structures
Presentation transcript:

Families of Software Systems Notkin: 3 of 3 lectures on change

Families of software systems What are the benefits of considering families of systems during software design? Why is the design you get for a system this way different from those achieved through other approaches? What is layering? What is the uses relation

Families of systems It is quite common for there to be many related versions of a software system True even omitting new versions intended “just” for adding features and fixing bugs Parnas makes the analogy to families of hardware systems The IBM 360 family is a great example One instruction set, many many implementations One goal was to meet distinct price-performance needs; another was to handle upgrading

Software examples Windows NT, Windows 98, Windows 2000 Local language versions of desktop packages Federal vs. state versions of TurboTax Different Unix versions A bazillion others

Common approach... … to developing members in a family of systems Design and build the first member Modify the first member to make the next member And so on

Basic problem The basic problem is that this is reactive design The design one gets for a later member of the family is based not on the best design, but on the history that led to it Ontogeny recapitulates Phylogeny Parnas argues that there are significant benefits to anticipating the family in advance

Premise There are collections of software systems in which one benefits enormously from understanding their commonalities before focusing on their differences These are program families One should explicitly design with this idea in mind Then the design will explicitly account for the family, leading to better designs

Note In neither approach will the design for a later member of the family be the same as if it were designed on its own In the evolutionary approach, this is because it’s derived from earlier designs In the family approach, this is because it’s designed as part of a family This is a tradeoff that is likely to have benefits in the long-term

Stepwise refinement: a limited kind of family approach This is the top-down style of program design Take your high-level task, decompose it into parts, assuming you can implement each part Then successive apply this technique to each of those parts, until you have a complete program Each of the parts that is not fully implemented represents a kind of family

Example: sorting while  x,y  [1..N]  A[x] < A[y] do swap(A[x],A[y]) end You can think of this as capturing the entire family of exchange sorts Bubble sort, insertion sort, shell sort, quicksort, etc. The decisions about the order of indices to compare distinguishes the family members

Stepwise refinement Stepwise refinement can reasonably be viewed as a design technique for representing families of systems But the top-down nature of the approach yields serious practical limitations In particular, one has to replay decisions from whatever node in the design tree is chosen, all the way down In small examples, small deal; in big systems, big deal; in really big systems, really big deal

Parnas’ explicit approach Anticipate family members and build information hiding modules that support the implementation of those family members Doesn’t require replay of all decisions from top to bottom Mix-and-match implementations while keeping interfaces stable

Layering A focus on information hiding modules isn’t enough Parnas’ also focuses on layers of abstract machines as a way to design families of systems Another view is to design in a way that easily enables the building of supersets (extensions) and subsets (contractions) These are equally important directions to be able to move in software – examples?

Examples In a strict layered design, a level can only use the immediately lower level Levels often promote operations through to the next level In the strictest view, recursion would be prohibited Other examples of layered systems? THE [Dijkstra 1960’s operating system] Level 5: User Programs Level 4: Buffering for I/O devices Level 3: Operator Console Device Driver Level 2: Memory Management Level 1: CPU Scheduling Level 0: Hardware

The uses relation Parnas says to layer using the uses relation A program A uses a program B if the correctness of A depends on the presence of a correct version of B Requires A ’s specification and implementation and B ’s specification What’s the specification? Signature? Implied or informal semantics ?

uses vs. invokes These relations often but do not always coincide Invocation without use: name service with cached hints Use without invocation: examples? ipAddr := cache(hostName); if not(ping(ipAddr)) ipAddr := lookup(hostName) endif

Parnas’ observation A non-hierarchical uses relation makes it difficult to produce useful subsets of a system That is, loops in the uses relation ( A uses B and B uses A, directly or indirectly) cause problems It also makes testing difficult So, it is important to design the uses relation

Criteria for uses(A,B) A is essentially simpler because it uses B B is not substantially more complex because it does not use A There is a useful subset containing B but not A There is no useful subset containing A but not B

Note again... …Parnas’ focus on criteria to help you design

Modules and layers interact? Information hiding modules and layers are distinct concepts How and where do they overlap in a system?

Language support We have lots of language support for information hiding modules C++ classes, Java interfaces, etc. We have essentially no language support for layering Operating systems provide support, primarily for reasons of protection, not abstraction Big performance cost to pay for “just” abstraction

Final words Design for change isn’t easy Information hiding and layering are two principles to remember There are others, such as separation of concerns There are lots of other issues/techniques intended to address change proactively Open implementation Aspect-oriented design/programming …

Final final words! Change in software is a huge issue Paying attention to it – even though it’s a future benefit more than an immediate one – can produce genuine value