high quality code why it matters
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
High Quality CodeWhy 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 processDesign is about tradeoffs and prioritiesDesign involves restrictionsDesign 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 DesignMinimal ComplexityEase of MaintenanceLoose CouplingExtensibilityReusabilityHigh Fan-inLow-to-medium Fan-inPortability
Desireable Characteristics of a Design ContLeannessStratificationStandard Techniques
5 Levels of Design
Level 1: The complete software systemLevel 2: Divisions into subsystemsLevel 3: Division into classesLevel 4: Division into data and routinesLevel 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 AbstractionsEncapsulate Implementation DetailsInheritanceInformation HidingIdentify 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 CohesionBuild HierarchiesFormalize Class ConstructsAssign ResponsibilitesDesign for TestAvoid Failure
Other Heuristics
Choose Variable Binding (assigning values) time carefully
Make Central Points of ControlConsider using Brute ForceDraw a DiagramModularity
Design Practices
Iterate--Keep iterating at a design process until you arrive at the most optimal
Divide and ConquerTop-Down and Bottom-Up DesignExperimental PrototypingCollaborative Design
Capturing your Design
Insert design documentation into the code itself
Capture design discussion and decisions on a wiki
Write email summaries
Questions?