26
David Evans http://www.cs.virginia.edu/ ~evans CS201j: Engineering Software University of Virginia Computer Science Lecture 8: Designing for Indestructability

David Evans cs.virginia/~evans

  • Upload
    neona

  • View
    25

  • Download
    0

Embed Size (px)

DESCRIPTION

Lecture 8: Designing for Indestructability. David Evans http://www.cs.virginia.edu/~evans. CS201j: Engineering Software University of Virginia Computer Science. Menu. Design Why it matters? What makes a good design? Modular Dependency Diagrams Documenting Designs - PowerPoint PPT Presentation

Citation preview

Page 1: David Evans cs.virginia/~evans

David Evanshttp://www.cs.virginia.edu/~evans

CS201j: Engineering SoftwareUniversity of VirginiaComputer Science

Lecture 8: Designing for Indestructability

Page 2: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 2

Menu

• Design– Why it matters?– What makes a good design?

• Modular Dependency Diagrams– Documenting Designs

• How to Design Systems– How to Design Programs

Page 3: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 3

Why Does Design Matter?

"How is a taste in this beautiful art to be formed in our countrymen, unless we avail ourselves of every occasion when public buildings are to be erected, of presenting to them models for their study and imitation?...You see, I am an enthusiast on the subject of the arts. But it is an enthusiasm of which I am not ashamed, as its object is to improve the taste of my countrymen, to increase their reputation, to reconcile them to the rest of the world, and procure them its praise."

Thomas Jefferson (letter to James Madison, 1785)

Page 4: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 4

Software Design Matters

• Cost/Time to Implement– Some of you learned this the hard way for PS3!

• Independence of Modules– Decoupled modules can be developed and

tested independently

• Ability to Change– Requirements for software change, poorly

designed software is hard/impossible to change

Page 5: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 5

The Browser Wars

• 1996:– Netscape Navigator: 73%– Microsoft IE: ~20%

• August 2002:– Microsoft IE: 96%– Netscape: ~1%

Page 6: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 6

Browser History

• NCSA Mosaic (first widely used browser) – no design, quick and dirty implementation

• Dec 1994: developed into Netscape Navigator, V 1.0 (100K lines of code)

• Oct 1994: Microsoft starts developing IE• 1995-1997: both browsers grew

uncontrollably– Communicator 4.0: 120 developer, 3M lines of

codeBased on Daniel Jackson’s Notes

Page 7: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 7

Microsoft Componentizes• IE 3.0: Microsoft does complete

restructuring (Jan-Aug 96)

• Designed around clear modules

• Team of 3-4 people designed component architecture– Modules: URL (high-level services), low-level

services, MSHTML (HTML rendering), shell document, security services, etc.

– Easy to customize browser by replacing components

Page 8: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 8

What went wrong for Netscape?

• 1997: Communicator is impossible to develop– Without clear interfaces and modules, can’t

divide work– All 120 developers had to work together

“Most of the code is self-contained spaghetti…The core functionality works, but it’s the little squeaks everywhere that break.” Aleks Totic, Netscape, July 1997

“We’re in a really bad situation with our current code base…we’re paying the price for going fast. And when you go fast, you don’t architect...”

Michael Toy, Netscape, July 1997

Page 9: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 9

Netscape’s Downfall

• Netscape tries for 2 months to re-architect browser, but failed

• Tried starting from scratch for Communicator 6.0 (never completed)

• Eventually, give up and release it as open source Mozilla– Nobody can understand the code, so no one

develops anything interesting for itBased on Daniel Jackson’s Notes

Page 10: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 10

Microsoft v. Netscape• Microsoft knew design mattered

– Designed IE 3.0 around clear modules– Easy to add new features, fix problems– Won AOL deal because they could customize

appearance of browser

• Netscape grew a quick-and-dirty implementation without clear modules and interfaces until it was impossible to develop

• Netscape sold to AOL, IE is the only browser that matters today

Page 11: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 11

How should we describe designs?

Page 12: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 12

Modular Dependency Diagrams

• Show the component modules– How is the program organized?

• Show the dependencies between them– How do modules depend on each other?

• Why do we want to know?

Page 13: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 13

Using MDDs• Design Time

– Consider different designs– If the MDD has lots of cycles, crossings, etc. the

design is not decoupled enough

• Implementation– Organize the implementation

• Testing– Where do you look when a test fails?

• Maintenance– What modules must be considered when specification

of one changes?

Page 14: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 14

MDD Notation

StringTableModule Usually a Java class

Page 15: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 15

MDD Notation

Module Usually a Java class

depends on the specification of

TableEntry

StringTable

Page 16: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 16

Code MDD

• If A calls a method of B, then A depends on the specification of B– If the specification of B changes, we need

to reconsider A

• If A mentions the class B, but doesn’t call any methods or access fields, then A weakly depends on B– If the specification of B changes, we don’t

need to reconsider A.

A

B

A

B

Page 17: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 17

PS2 Module Dependencies

TableEntry

StringTable

NameTrends

StringIterator

If the specification of StringTable changes,do we have to reconsider NameTrends?

Yes, dependencies reveal dependencies.

Page 18: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 18

PS2 Module Dependencies

TableEntry

StringTable

NameTrends

StringIterator

If the specification of TableEntry changes,do we have to reconsider NameTrends?

No, we only have to consider StringTable.

Page 19: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 19

PS2 Module Dependencies

TableEntry

StringTable

NameTrends

StringIterator

If the implementation of StringIterator changes,what classes must be reconsidered?

None! Trick question – if specification contractis followed, we only care when spec changes.

Page 20: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 20

PS1 Module Dependency Diagram

Grid

CellAutomata

Cell

CellState

GridDisplay

ConwayLifeCell

is a subtype of(extends)

What’s bad about this design?

Page 21: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 21

Evaluating Designs

Grid

Cell

Circular Dependency: Grid depends on CellCell depends on Grid

Page 22: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 22

Why are circular dependencies bad?• Need to finish both modules before you can test

them (can use stub versions for testing)• If a test fails, may be hard to figure out which

module is at fault• If spec of one changes, need to reconsider other

module, but what if its spec changes as a result?• But…sometimes unavoidable

– Challenge: come up with a better design for PS1 (with 100 bonus points!)

Page 23: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 23

Evaluating Designs

• Conflicting demands:

Dependencies are bad, but reuse is good

StringTable

NameTrends

StringIterator

Page 24: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 24

Evaluating Designs• Too many modules: lots of dependencies,

overall design too complex to understand

• Too few modules: hard to divide, each module may be too big to implement

• Guideline: humans can only understand about 7 things at once – if you have more than 7 modules, make the modules bigger (could then subdivide them)

Page 25: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 25

Evaluating Designs

• No absolute rules

• Important thing is that you can justify your design by explaining why it is better than alternatives

• A good design will make implementation (relatively) easy, a bad design will make implementation impossible

Page 26: David Evans cs.virginia/~evans

24 September 2002 CS 201J Fall 2002 26

Charge• PS4: Design Document

– Due Thursday

• Wednesday, 8pm: AC’s will hold recitation on useful programming techniques– Not intended to help with design for PS4 – But, will be helpful for coding for PS4 and

beyond…