1 / 19

High Quality Code Why it matters.

High Quality Code Why it matters. By Ryan Ruzich. Design. Definition: Software Design means the conception, invention, or contrivance of a scheme for turning a specification for computer software into operational software. Challenges in Design.

zohar
Download Presentation

High Quality Code Why it matters.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. High Quality CodeWhy it matters. By Ryan Ruzich

  2. Design • Definition: Software Design means the conception, invention, or contrivance of a scheme for turning a specification for computer software into operational software.

  3. Challenges in Design • Horst Rittel and Melvin Webber defined a “wicked” problem as one that could be clearly described only by solving it, or by solving part of it. • Essentially, this implies you have to “solve” the problem in order to define it, and solve it again to create a solution that works.

  4. Challenges in Design • Design is a sloppy process • Design is about tradeoffs and priorities • Design involves restrictions • Design is nondeterministic (multiple ways to solve each part) • Design is a heuristic process (rules of thumb) • Design is emergent(evolves over time).

  5. Desireable Characteristics of a Design • Minimal Complexity • Ease of Maintenance • Loose Coupling • Extensibility • Reusability • High Fan-in • Low-to-medium Fan-in • Portability

  6. Desireable Characteristics of a Design Cont • Leanness • Stratification • Standard Techniques

  7. 5 Levels of Design • Level 1: The complete software system • Level 2: Divisions into subsystems • Level 3: Division into classes • Level 4: Division into data and routines • Level 5: Internal routine design

  8. Heuristics • Because Design is nondeterministic, Software Engineers must follow “rules of thumb”, more commonly known as Heuristics, in their approach to software design.

  9. Some Common Heuristics • Find Real World Objects to base your ADT’s on. • Form Consistent Abstractions • Encapsulate Implementation Details • Inheritance • Information Hiding • Identify Areas Likely to Change and Isolate them. • Keep Coupling of Classes Loose

  10. Common Design Patterns • Reduce Complexity by providing ready-made abstractions • Reduce Errors by institutionalizing details of common solutions • Provide Heuristic Value by suggesting Design Alternatives • Streamline Communication by moving the design dialog to a higher level

  11. Other Heuristics • Aim for Strong Cohesion • Build Hierarchies • Formalize Class Constructs • Assign Responsibilites • Design for Test • Avoid Failure

  12. Other Heuristics • Choose Variable Binding (assigning values) time carefully • Make Central Points of Control • Consider using Brute Force • Draw a Diagram • Modularity

  13. Design Practices • Iterate--Keep iterating at a design process until you arrive at the most optimal • Divide and Conquer • Top-Down and Bottom-Up Design • Experimental Prototyping • Collaborative Design

  14. Capturing your Design • Insert design documentation into the code itself • Capture design discussion and decisions on a wiki • Write email summaries

  15. Questions?

More Related