# Maintenance, Configuration Management, Quality, CMM and Reliability

Source: https://skills101.in/learn/software-engineering/software-maintenance-quality-cmm — Skills101 free tutorial (Software Engineering). Updated 2026-11-09.

Release day is the beginning, not the end. Most of a product's life — and most of its cost — is spent after release.

## 1. Types of maintenance

| Type | Why | Example |
|---|---|---|
| **Corrective** | fix bugs found after release | wrong GST total on invoices |
| **Adaptive** | adapt to a changed environment | new Android version, new tax law, moving to cloud |
| **Perfective** | improve or add features users ask for | add dark mode, make search faster |
| **Preventive** | prevent future problems | refactor messy code, update old libraries |

Perfective maintenance usually takes the largest share.

## 2. Re-engineering and reverse engineering

- **Reverse engineering** — study existing code to recover its design and specifications (often for old code with no documents).
- **Re-engineering** — reverse engineer, then **restructure** and rebuild with better design or technology, keeping the same functionality (e.g. a COBOL system rewritten in Java).
- **Forward engineering** — the normal direction: requirements → design → code.

**Legacy system** = old software still critical to the business, hard and risky to change.

## 3. Software Configuration Management (SCM)

Keeps control of every changing item (code, documents, test cases):

- **Configuration items** and **baselines** — an approved version that changes only through formal control.
- **Version control** — Git: who changed what, when, and why. (See our [Git tutorial](https://skills101.in/learn/git).)
- **Change control** — a change request → impact analysis → approval by a change control board → implement → test → release.
- **Configuration audit** and **status reporting**.

## 4. Quality: QA vs QC

| Quality Assurance (QA) | Quality Control (QC) |
|---|---|
| **process**-oriented — prevent defects | **product**-oriented — find defects |
| standards, reviews of process, audits | testing, inspections of the product |
| "Are we following a good process?" | "Does this build have bugs?" |

**Formal technical reviews (FTR)**, walkthroughs and inspections are QA activities that catch defects in documents and code before testing.

**ISO 9001** — an international standard for quality management systems in any organisation (not software-specific). Certified companies follow documented, audited processes.

**Six Sigma** — a data-driven method aiming for fewer than 3.4 defects per million opportunities.

## 5. CMM / CMMI — process maturity

![CMM maturity staircase: level 1 initial, 2 repeatable, 3 defined, 4 managed, 5 optimizing](https://skills101.in/learn-img/software-engineering/cmm.svg)

| Level | Name | Characteristics |
|---|---|---|
| 1 | Initial | chaotic, success depends on individual heroes |
| 2 | Repeatable | basic project management: cost, schedule, tracking |
| 3 | Defined | a documented, standard process across the organisation |
| 4 | Managed | process and quality measured with data |
| 5 | Optimizing | continuous process improvement |

Developed by the SEI (Carnegie Mellon). Many Indian IT companies are CMMI level 5. (In CMMI, level 2 is called "Managed" and level 4 "Quantitatively Managed".)

## 6. Reliability metrics

- **MTTF** (mean time to failure) — average time the system runs before failing.
- **MTTR** (mean time to repair) — average time to fix and restore it.
- **MTBF** = MTTF + MTTR.
- **Availability** = MTTF ÷ (MTTF + MTTR) × 100%.

**Example:** MTTF = 495 hours, MTTR = 5 hours → MTBF = 500 hours, availability = 495 ÷ 500 = **99%**.

Others: **ROCOF** (rate of occurrence of failures) and **POFOD** (probability of failure on demand).

## Common mistakes

- Calling a new-law update "corrective" — it's **adaptive** (nothing was broken).
- Saying QA = testing. Testing is QC; QA improves the process.
- MTBF = MTTF + MTTR (not minus).

## Quick recap

- Maintenance: corrective, adaptive, perfective, preventive.
- Reverse engineering recovers design; re-engineering rebuilds it better.
- SCM: baselines, version control, change control.
- QA prevents (process), QC detects (product). CMM: initial → repeatable → defined → managed → optimizing.
- Availability = MTTF ÷ (MTTF + MTTR).


Practice quiz and free certificate: https://skills101.in/learn/software-engineering/software-maintenance-quality-cmm