Code Quality

There are two ways of constructing a software design: one way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies. - C.A.R. Hoare
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away. - Antoine de Saint-Exupery

Coupling and Cohesion

Code Metrics

  • Code Metrics (note: we will stick to metrics that relate to readability and maintenance rather than business or run-time efficiency metrics)
    • Number of lines of code (per method, per class)
    • Cyclomatic complexity - wikipedia
  • Dependency graph example (originally from http://www.ndepend.com/SampleReports/OnNUnitNew/ComponentDependenciesDiagram.png)

Code Smells

Anti-patterns

Refactoring

  • What is refactoring? - restructuring existing computer code without changing its external behavior
  • Why Refactor?
    • Refactoring improves the design of software -without refactoring, a design will "decay" as people make changes to a software system
    • Refactoring makes software easier to understand - because structure is improved, duplicated code is eliminated, etc.
    • Refactoring helps you find bugs - refactoring promotes a deep understanding of the code at hand, and this understanding aids the programmer in finding bugs and anticipating potential bugs
    • Refactoring helps you program faster - because a good design enables progress
  • When to refactor?
    • Outcomes from tools that do static code analysis
    • When you know the initial implementation was poorly planned or was rushed
    • When your boss says so
  • Choosing what to refactor and how to do it
    • Files with poor metrics from code analysis
    • Code smells

Technical Debt

Other thoughts and opinions on code quality, some with code samples

top