SlideServe
Menu
Préférences
© SlideServe · v2026

The Importance of High-Quality Software Design

zohar avatar
19 diapositives · 375 Views · Sep 28, 2014

High-quality software design is essential for transforming specifications into functional applications. This process is complex and filled with challenges, often requiring a "wicked" approach where solving parts of the problem helps define it. Effective software design emphasizes minimal complexity, ease of maintenance, extensibility, and reusability. Key design heuristics guide engineers in creating cohesive, low-coupling systems, while iterative practices ensure optimal solutions. Capturing design documentation is vital for maintaining clarity and communication throughout the development process.

The Importance of High-Quality Software Design - slide 1
01 / 19The Importance of High-Quality Software Design
1 / 17

Télécharger la présentation

The Importance of High-Quality Software Design
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  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?