Software Engineering Principles and Practices / Software Quality Assurance

Software Quality

🏗️ Software Quality: The Two Lenses

Software Quality is the degree to which a system meets requirements and customer expectations. It’s not just about a "lack of bugs" 🐛; it’s about purpose and longevity.

  • Quality Assurance (QA) 🛠️: Focuses on the process. It's proactive—preventing defects before they happen.

  • Quality Control (QC) 🔍: Focuses on the product. It's reactive—identifying and fixing defects in the final output.


🏛️ McCall’s Quality Factors

Jim McCall’s model organizes quality into three distinct "pillars" of the software lifecycle:

  1. Product Operation ⚙️: How well does it run?

    • Factors: Correctness, Reliability, Efficiency, Integrity, Usability.

  2. Product Revision 🔧: How easy is it to change?

    • Factors: Maintainability, Flexibility, Testability.

  3. Product Transition ✈️: How easy is it to move?

    • Factors: Portability, Reusability, Interoperability.


📊 QA vs. QC: A Quick Comparison

Feature

Quality Assurance (QA) 🛡️

Quality Control (QC) 🧪

Focus

Process-oriented.

Product-oriented.

Goal

Prevent defects.

Identify and fix defects.

Activity

Audits, process definition.

Testing, inspections, code reviews.

When?

Throughout the entire SDLC.

During and after development.


📈 Software Quality Metrics

Measuring quality objectively requires data-driven points:

  • Defect Density 📉: Calculated as $Defects \div Size$ (usually per KLOC).

  • Reliability ⏲️: Measured as Mean Time Between Failures (MTBF).

    $$MTBF = MTTF + MTTR$$

    (MTTF = Mean Time To Failure; MTTR = Mean Time To Repair)

  • Cyclomatic Complexity 🌀: Measures logical complexity. High complexity = High risk of bugs.


💰 The Cost of Quality (CoQ)

Quality has a price, but "un-quality" (technical debt) is always more expensive!

  • Prevention Costs 🌱: Training, planning, and process mapping.

  • Appraisal Costs 🧐: Testing, inspections, and audits.

  • Failure Costs 💥:

    • Internal: Fixing bugs before the customer sees them.

    • External: Post-release fixes, support calls, and brand damage.


🤝 Formal Technical Reviews (FTR)

An FTR is a collaborative "inspection" of code, design, or requirements.

  • Objective 🎯: Uncover errors in logic or implementation early.

  • The Golden Rule ✨: It is far cheaper to find a bug during a 30-minute peer review than during a week-long system test.


🌐 Summary: ISO/IEC 25010 Dimensions

Modern standards expand quality into eight key characteristics:

  1. Functional Suitability ✅ (Does it work?)

  2. Performance Efficiency ⚡ (Is it fast?)

  3. Compatibility 🤝 (Does it play well with others?)

  4. Usability 🙋‍♂️ (Is it user-friendly?)

  5. Reliability ⚓ (Is it stable?)

  6. Security 🛡️ (Is it safe?)

  7. Maintainability 🛠️ (Is it easy to fix?)

  8. Portability 📱 (Does it run everywhere?)