⬅️ Code Complete

  • from construction point of view

Characteristics of software quality:

External (users care about this):

  • correctness
  • usability
  • efficiency
  • reliability
  • integrity (restricting non-auth users)
  • adaptability
  • accuracy
  • robustness (continued function even under unanticipated conditions)

Internal:

  • maintanability
  • flexibility
  • portability
  • reusability
  • readability
  • testability
  • understandability

Finding an optimal solution from a set of competing objectives is one activity that makes software development a true engineering discipline.

Techniques for improving software quality

  • software-quality objectives: setting explicit goals, mixing internal/external characteristics

  • explicit quality-assurance activity: the organization must show programmers that quality is a priority

  • testing strategy

  • software engineering guidelines

  • informal and formal technical reviews

  • external audits

  • avoid uncontrolled changes

  • prototyping

  • Regarding setting objectives: The surprising implication is that people actually do what you ask them to do.

  • Different people tend to find different defects, and it’s best to do a combination of defect-detecting efforts.

  • A study found that code reading detected about 80% more faults per hour than testing

Recommended combination for achieving higher-than-average quality:

  • formal inspections of all requirements, all architecture, and designs for critical parts of a system
  • modeling or prototyping
  • code reading or inspections
  • execution testing

You should emphasize quality-assurance work in the early stages and throughout the rest of the project.

  • General principles of Software quality: improving quality reduces development costs
  • the best way to improve productivity and quality is to reduce the time spent reworking code
  • The industry average: 10-50 lines of code delivered per person/per day
  • The single biggest activity on most projects is debugging and correcting code that doesn’t work properly