High Quality Code Why it matters. By Ryan Ruzich.

Slides:



Advertisements
Similar presentations
Software Engineering Key construction decisions Design challenges.
Advertisements

Software Engineering Key design concepts Design heuristics Design practices.
Ch:8 Design Concepts S.W Design should have following quality attribute: Functionality Usability Reliability Performance Supportability (extensibility,
Object-Oriented Software Development CS 3331 Fall 2009.
By Justin Hendrix. Design Challenges Design is the activity that links requirements to coding and debugging. Good design is useful on small project and.
Design Concepts and Principles
Chapter 13 Design Concepts and Principles
High Quality Code – Style Matters  Chapter 5. Design in Construction  Chapter 31. Layout and Style Software Construction by Jeff Nogy.
CSCE 121, Sec 200, 507, 508 Software Engineering Fall 2010 Prof. Jennifer L. Welch.
1 CSE1301 Computer Programming Lecture 25: Software Engineering.
Fall 2007CS 225 Introduction to Software Design Chapter 1.
Ch3: Software Engineering Principles 1 What is a principle?  Definition:  Goals of accounting principles:  Goals of software engineering principles?
Introduction to Software Design Chapter 1. Chapter 1: Introduction to Software Design2 Chapter Objectives To become familiar with the software challenge.
Chapter 1 Principles of Programming and Software Engineering.
The Software Design Process CPSC 315 – Programming Studio Fall 2009.
1 ES 314 Advanced Programming Lec 2 Sept 3 Goals: Complete the discussion of problem Review of C++ Object-oriented design Arrays and pointers.
© 2006 Pearson Addison-Wesley. All rights reserved2-1 Chapter 2 Principles of Programming & Software Engineering.
Lecture 8: Structured Design and Object Oriented Design CSE 111 7/12/20151Copyright William. E. Howden.
Chapter 22 Object-Oriented Design
Introduction to Software Design Chapter 1. Chapter 1: Introduction to Software Design2 Chapter Objectives To become familiar with the software challenge.
Continuation From Chapter From Chapter 1
Copyright © 2002, Systems and Computer Engineering, Carleton University Intro.ppt * Object-Oriented Software Development Unit 1 Course.
The Design Discipline.
Chapter 5CSA 217 Design in Construction Chapter 5 1.
Design Patterns OOD. Course topics Design Principles UML –Class Diagrams –Sequence Diagrams Design Patterns C#,.NET (all the course examples) Design Principles.
1/19 Component Design On-demand Learning Series Software Engineering of Web Application - Principles of Good Component Design Hunan University, Software.
Design-Making Projects Work (Chapter7) n Large Projects u Design often distinct from analysis or coding u Project takes weeks, months or years to create.
“Enhancing Reuse with Information Hiding” ITT Proceedings of the Workshop on Reusability in Programming, 1983 Reprinted in Software Reusability, Volume.
An Introduction to Software Architecture
CSE 303 – Software Design and Architecture
An Introduction to Design Patterns. Introduction Promote reuse. Use the experiences of software developers. A shared library/lingo used by developers.
SAMANVITHA RAMAYANAM 18 TH FEBRUARY 2010 CPE 691 LAYERED APPLICATION.
Unified Modeling Language, Version 2.0
Introduction to Software Design Chapter 1. Chapter Objectives  To become familiar with the software challenge and the software life cycle  To understand.
THE SOFTWARE DESIGN PROCESS CSCE 315 – Programming Studio Spring 2010.
1 Systems Analysis and Design in a Changing World, Thursday, January 18, 2007.
©Ian Sommerville 2006Software Engineering, 8th edition. Chapter 11 Slide 1 Design.
DESIGN PATTERNS CSC532 Adv. Topics in Software Engineering Shirin A. Lakhani.
CSE 403, Spring 2008, Alverson Software Design “There are two ways of constructing a software design: one way is to make it so simple that there are obviously.
Software Engineering Principles. SE Principles Principles are statements describing desirable properties of the product and process.
1 CSCD 326 Data Structures I Software Design. 2 The Software Life Cycle 1. Specification 2. Design 3. Risk Analysis 4. Verification 5. Coding 6. Testing.
© 2006 Pearson Addison-Wesley. All rights reserved2-1 Chapter 2 Principles of Programming & Software Engineering.
© 2006 Pearson Addison-Wesley. All rights reserved 2-1 Chapter 2 Principles of Programming & Software Engineering.
1 Unified Modeling Language, Version 2.0 Chapter 2.
Software Engineering Issues Software Engineering Concepts System Specifications Procedural Design Object-Oriented Design System Testing.
Design. Practices Principles Patterns What are the characteristics of good design? What are good solutions to common design problems? How do we go about.
11 Software Design CSCU 411 Software Engineering.
High Quality Code – Style Matters  Design in Construction  Layout and Style Software Construction by Jeff Nogy.
1 These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 5/e and are provided with permission by.
Banaras Hindu University. A Course on Software Reuse by Design Patterns and Frameworks.
Chapter 2 Principles of Programming and Software Engineering.
Basic Characteristics of Object-Oriented Systems
Design Engineering 1. Analysis  Design 2 Characteristics of good design 3 The design must implement all of the explicit requirements contained in the.
Principles of Programming & Software Engineering
Object Oriented Systems Design
CSC 421: Algorithm Design & Analysis
Design in Construction
Systems Analysis and Design With UML 2
CSC 421: Algorithm Design & Analysis
Principles of Programming and Software Engineering
About the Presentations
Chapter 5 Design in Construction
CSC 421: Algorithm Design & Analysis
The Software Design Process
Object-Oriented Design
Object oriented analysis and design
An Introduction to Software Architecture
Producing Production Quality Software
Chapter 2. Problem Solving and Software Engineering
Top-Down Design & JSP Skill Area Part D
Presentation transcript:

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 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.

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).

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

Desireable Characteristics of a Design Cont Leanness Stratification Standard Techniques

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

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

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

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

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

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

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

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

Questions?