Synesis Software Training Courses

Quality Matters in Principle

Software Quality comprises many different, often conflicting, characteristics, operating on different levels.

This first part of a two-part course expounds on the issues raised in Matthew's Quality Matters column in ACCU's Overload, discussing the concepts and principles of Software Quality, highlighting the conflicts between them, and examines techniques for working around/beyond those conflicts.


Intermediate. Assumes prior experience of one or more major languages (C / C++ / C# / Java / Python / Ruby).




2 days: lectures + question & answer sessions

Material Covered

  • Why is Quality important?
  • What is Quality?
  • A Practical Philosophy for Software Quality
    • Intrinsic Software Quality Characteristics
      • Correctness / Reliability / Robustness
      • Efficiency
      • Discoverability & Transparency
      • Modularity
      • Expressiveness
      • Flexibility
      • Portability
    • (Removable) Diagnostic Measures
      • The Principle of Removability
      • Code Coverage Constructs
      • Constraints
      • Contract Enforcements
      • Diagnostic Logging Constructs
      • Static Assertions
    • Applied Assurance Measures
      • Automated Functional Testing
      • Performance Profiling & Testing
      • User Acceptance Testing
      • Scratch Testing
      • Smoke Testing
      • Code coverage Analysis/Testing
      • Review (manual & automated)
      • Coding Standards
      • Code Metrics (automated & manual)
      • Multi-target Compilation
      • ... and more ...
  • Case Studies

    (case studies are selected and prepared on a per-client basis)
  • Applying the Quality Matters philosphy
    • Attracting real users: It's the coupling, Stupid!
    • Automated testing
    • Component vs Unit-testing: A scratch and sniff approach
    • Conformance: Structural, Semantic, Explicit, Intersecting, and all manner of foul beasts
    • Contract Programming: The principles of Removability and Irrecoverability
    • Correctness, Robustness and Reliability
    • Cracking the Abstraction Puzzle
    • Defining clean methods
    • Defining contracts: Identifying and defining software components
    • Efficiency in reality
    • Henney's Hyopthesis
    • Overloading vs Overriding
    • Packaging
    • Software Quality Measures for Multithreaded Programming
    • The evils of the Boolean type(s)
    • The Logging Conundrum
    • Trade-offs in Intrinsic Software Quality Characteristics