Presentation is loading. Please wait.

Presentation is loading. Please wait.

David Evans CS201j: Engineering Software University of Virginia Computer Science Lecture 8: Designing for Indestructability.

Similar presentations


Presentation on theme: "David Evans CS201j: Engineering Software University of Virginia Computer Science Lecture 8: Designing for Indestructability."— Presentation transcript:

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

2 24 September 2002CS 201J Fall 20022 Menu Design –Why it matters? –What makes a good design? Modular Dependency Diagrams –Documenting Designs How to Design Systems –How to Design Programs

3 24 September 2002CS 201J Fall 20023 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)

4 24 September 2002CS 201J Fall 20024 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

5 24 September 2002CS 201J Fall 20025 The Browser Wars 1996: –Netscape Navigator: 73% –Microsoft IE: ~20% August 2002: –Microsoft IE: 96% –Netscape: ~1%

6 24 September 2002CS 201J Fall 20026 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 code Based on Daniel Jackson’s Notes

7 24 September 2002CS 201J Fall 20027 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

8 24 September 2002CS 201J Fall 20028 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

9 24 September 2002CS 201J Fall 20029 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 it Based on Daniel Jackson’s Notes

10 24 September 2002CS 201J Fall 200210 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

11 24 September 2002CS 201J Fall 200211 How should we describe designs?

12 24 September 2002CS 201J Fall 200212 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?

13 24 September 2002CS 201J Fall 200213 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?

14 24 September 2002CS 201J Fall 200214 MDD Notation StringTable Module Usually a Java class

15 24 September 2002CS 201J Fall 200215 MDD Notation Module Usually a Java class depends on the specification of TableEntry StringTable

16 24 September 2002CS 201J Fall 200216 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

17 24 September 2002CS 201J Fall 200217 PS2 Module Dependencies TableEntry StringTable NameTrends StringIterator If the specification of StringTable changes, do we have to reconsider NameTrends ? Yes, dependencies reveal dependencies.

18 24 September 2002CS 201J Fall 200218 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.

19 24 September 2002CS 201J Fall 200219 PS2 Module Dependencies TableEntry StringTable NameTrends StringIterator If the implementation of StringIterator changes, what classes must be reconsidered? None! Trick question – if specification contract is followed, we only care when spec changes.

20 24 September 2002CS 201J Fall 200220 PS1 Module Dependency Diagram Grid CellAutomata Cell CellState GridDisplay ConwayLifeCell is a subtype of (extends) What’s bad about this design?

21 24 September 2002CS 201J Fall 200221 Evaluating Designs Grid Cell Circular Dependency: Grid depends on Cell Cell depends on Grid

22 24 September 2002CS 201J Fall 200222 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!)

23 24 September 2002CS 201J Fall 200223 Evaluating Designs Conflicting demands: Dependencies are bad, but reuse is good StringTable NameTrends StringIterator

24 24 September 2002CS 201J Fall 200224 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)

25 24 September 2002CS 201J Fall 200225 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

26 24 September 2002CS 201J Fall 200226 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…


Download ppt "David Evans CS201j: Engineering Software University of Virginia Computer Science Lecture 8: Designing for Indestructability."

Similar presentations


Ads by Google