the design processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 softwar… · the...

35
THE SOFTWARE DESIGN PROCESS CSCE 315 – PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

Upload: others

Post on 12-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

THE SOFTWARE DESIGN PROCESSCSCE 315 – PROGRAMMING STUDIO, SPRING 2019

ROBERT LIGHTFOOT

Page 2: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

OUTLINE

• Challenges in Design

• Design Concepts

• Heuristics

• Practices

Page 3: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

CHALLENGES IN DESIGN

• A problem that can only be defined by solving it

• Only after “solving” it do you understand what the needs

actually are, or what things are missing from the naïve design

• e.g. Tacoma Narrows bridge design

• Before the bridge collapsed for wind ripple, engineers did not

know that aerodynamics have to be factored

• “Plan to throw one away”

Page 4: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

CHALLENGES IN DESIGN

• Process is Sloppy

• Mistakes

• Wrong, dead-end paths

• Stop when “good enough”

• Mistakes in design and recognizing them is better than finding them out in/after

coding phase

• Tradeoffs and Priorities

• All realistic software face some sort of limit

• Design balances between often conflicting requirements

• Priorities can change

• Although unusual in class projects, overwhelmingly common in industry

Page 5: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

CHALLENGES IN DESIGN

• Restrictions are necessary

• Constraints improve the result

• Nondeterministic process

• Not one “right” solution

• A Heuristic process

• Rules of thumb vs. fixed process

• Difficult to know when to stop (Is the design good enough?)

• Emergent

• Evolve and improve during design, coding

Page 6: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

LEVELS OF DESIGN

• Software system as a whole

• Division into subsystems/packages

• Classes within packages

• Data and routines within classes

• Internal routine design

Work at one level can affect those below andabove

Design can be iterated at each level

Page 7: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

KEY DESIGN CONCEPTS

• Most Important: Manage Complexity

• “No one’s skull is big enough for a modern computer program” -

Dijkstra

• Software already involves conceptual hierarchies, abstraction

• Goal: minimize how much of a program you have to think about

at once

• Again, pointing to hierarchy in design

• Should completely understand the impact of code changes in one

area on other areas

Page 8: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity Favor “simple” over “clever”

Page 9: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity

• Ease of maintenance

Imagine what maintainer of code will want to know

Be self-explanatory

Page 10: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity

• Ease of maintenance

• Loose coupling

Keep connections between parts of programs minimized Avoid n2 interactions!

Abstraction, encapsulation, information hiding

Page 11: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity

• Ease of maintenance

• Loose coupling

• Extensibility

Should be able to add to one part of system without affecting others

Page 12: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity

• Ease of maintenance

• Loose coupling

• Extensibility

• Reusability

Design so code could be “lifted” into a different system

Good design, even if never reused

Page 13: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity

• Ease of maintenance

• Loose coupling

• Extensibility

• Reusability

• High fan-in

For a given class, have it used by many others

Indicates good capture of underlying functions

Page 14: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity

• Ease of maintenance

• Loose coupling

• Extensibility

• Reusability

• High fan-in

• Low-to-medium fan-out

Don’t use too many other classes

Complexity management

See Stratification

But, don’t reinvent the wheel.

Page 15: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity

• Ease of maintenance

• Loose coupling

• Extensibility

• Reusability

• High fan-in

• Low-to-medium fan-out

• Portability

Consider what will happen if moved to another environment

Page 16: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity

• Ease of maintenance

• Loose coupling

• Extensibility

• Reusability

• High fan-in

• Low-to-medium fan-out

• Portability

• Leanness

Don’t add extra parts for future

That does not avoid future changes

Extra code will need to be tested, reviewed in future changes

“A book is finished not when nothing more can be added but when nothing more can be taken away” - Voltaire

Page 17: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity

• Ease of maintenance

• Loose coupling

• Extensibility

• Reusability

• High fan-in

• Low-to-medium fan-out

• Portability

• Leanness

• Stratification

Design so that you don’t have to consider beyond the current layer

Get a full view from every level

Page 18: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

GOOD DESIGN CHARACTERISTICS

• Minimal complexity

• Ease of maintenance

• Loose coupling

• Extensibility

• Reusability

• High fan-in

• Low-to-medium fan-out

• Portability

• Leanness

• Stratification

• Standard Techniques

Use of common approaches make it easier to follow code later

Avoid unneeded exotic approaches

Page 19: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

LEVELS OF DESIGN

Page 20: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

DESIGN HEURISTICS

• Understand the Problem

• Devise a Plan

• Carry Out the Plan

• Look Back and Iterate

Page 21: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

FIND REAL-WORLD OBJECTS

• Standard Object-Oriented approach

• Identify 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 (public/private)

• Define each object’s public interface

Page 22: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

FORM CONSISTENT ABSTRACTIONS

• View concepts in the aggregate

• “Car” rather than “engine, body, wheels, etc.”

• Identify common attributes

• Form base class

• Focus on interface rather than implementation

• Form abstractions at all levels

• Car, Engine, Piston

Page 23: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

INHERITANCE

• Inherit when helpful

• When there are common features

• Inheritance can easily be misused

Page 24: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

INFORMATION HIDING

• Interface should reveal little about inner workings

• Example: Assign ID numbers

• Assignment algorithm could be hidden

• ID number could be typed

• Encapsulate Implementation Details

• Don’t set interface based on what’s easiest to use

• Tends to expose too much of interior

• Think about “What needs to be hidden”

Page 25: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

MORE ON INFORMATION HIDING

• Two main advantages

• Easier to comprehend complexity

• Localized effects allow local changes

• Issues:

• Circular dependencies

• A->B->A

• Global data (or too-large classes)

• Performance penalties

• Valid, but less important, at least at first

• See this HealthCare.Gov explanation.

Page 26: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

IDENTIFY AREAS LIKELY TO CHANGE

• Anticipate Change

• Identify items that seem likely to change

• Separate these items into their own class

• Limit connections to that class, or create interface that’s unlikely to change

• Examples of potential change areas:

• Business Rules, Hardware Dependencies, Input/Output, Analog to digital, copper to fiber, Nonstandard language features, status variables, difficult design/coding areas

Page 27: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

KEEP COUPLING LOOSE

• Relations to other classes/routines

• Small Size• Fewer parameters, methods

• Visible• Avoid interactions via global variables

• Flexible• Don’t add unnecessary dependencies

• e.g. using method that’s not unique to the class it belongs to

• See this Example.

Page 28: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

KINDS OF COUPLING

• Data-parameter (good)• Data passed through parameter lists• Primitive data types

• Simple-object (good)• Module instantiates that object

• Object-parameter (so-so)• Object 1 requires Object 2 to pass an Object 3

• Semantic (bad)• One object makes use of semantic information about the

inner workings of another

Page 29: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

EXAMPLES OF SEMANTIC COUPLING

• Module 1 passes control flag to Module 2

• Can be OK if control flag is typed

• Module 2 uses global data that Module 1 modifies

• Module 2 relies on knowledge that Module 1 calls to initialize internally, so it doesn’t call it

• Module 1 passes Object to Module 2, but only initializes the parts of Object it knows Module 2 needs

• Module 1 passes a Base Object, but Module 2 knows it is actually a Derived Object, so it typecasts and calls methods unique to the derived object

Page 30: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

DESIGN PATTERNS

• Design Patterns, by “Gang of Four” (Gamma, Helm, Johnson, Vlissides)

• Common software problems and solutions that fall into patterns

• Provide ready-made abstractions

• Provide design alternatives

• Streamline communication among designers

Page 31: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

MORE ON DESIGN PATTERNS

• Given common names. For instance,

• “Bridge” – builds an interface and an implementation in such a

way that either can vary without the other varying

• “Singleton” – makes sure that only 1 instance of the class is ever

created

• We will dedicate an entire lecture to Design Patterns. We

will see more of it.

Page 32: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

OTHER HEURISTICS

• Strong Cohesion

• All routines support the main purpose

• e.g., A class named “NFLPlayer” does not have a member function

“string_reverse()”, because the cohesion become week

• Build Hierarchies

• Manage complexity by pushing details away

• Formalize Class Contracts

• Clearly specify what is needed/provided

• Assign Responsibilities

• Ask what each object should be responsible for

Summary: Each class has a specific job, none of them are “jack-

of-all-trade” type

Page 33: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

MORE HEURISTICS

• Design for Test

• Consider how you will test it from the start

• If a class/module that is not immediately testable, reevaluate it

• Avoid Failure

• Think of ways it could fail

• Think about the unthinkable

• Make Central Points of Control

• In simple case: a bunch of define statements at the beginning (e.g., requires changing a few parameters)

• In a more complicated case: Load a template of configuration (e.g., requires changing 10s or 100s or parameters)

• Fewer places to look -> easier changes

Page 34: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

MORE HEURISTICS

• Consider Using Brute Force

• Especially for early iteration

• Working is better than non-working

• Might work only as a proof of concept and fail under actual

load. (HealthCare.gov)

• Draw Diagrams

• Keep Design Modular

• Black Boxes

Page 35: The Design Processpeople.tamu.edu/~rob.light/spring2019/csce315/lectures/11 Softwar… · THE SOFTWARE DESIGN PROCESS CSCE 315 –PROGRAMMING STUDIO, SPRING 2019 ROBERT LIGHTFOOT

DESIGN PRACTICES(WE MAY RETURN TO THESE)

• Iterate – Select the best of several attempts

• Decompose in several different ways

• Top Down vs. Bottom Up

• Prototype

• Collaborate: Have others review your design either formally or informally

• Design until implementation seems obvious• Balance between “Too Much” and “Not Enough”

• Capture Design Work• Design documents