RemNote Community
Community

Study Guide

📖 Core Concepts Software Maintenance – modifying delivered software to fix defects, add functionality, or keep it usable. Maintenance Lifecycle – begins with a change request, proceeds through analysis, effort estimation, scheduling, implementation, and re‑validation (testing, code review). Maintainability – a quality attribute that makes a system easy to modify without breaking existing behavior. Technical Debt – shortcuts taken during development that increase future maintenance effort. Legacy System – an old, critical system that is hard to change because of obsolete tech, missing docs, or expert‑only knowledge. --- 📌 Must Remember Maintenance consumes 80‑90 % of total software life‑cycle cost. Corrective, Preventive, Adaptive, Perfective are the four maintenance categories. Enhancement work (adaptive + perfective) ≈ 80 % of all maintenance effort. Testing and re‑validation account for most of maintenance cost, especially for safety‑critical systems. Technical debt → higher bug rate, more expensive changes, eventual need for rewrite or migration. Legacy decision options: freeze, wrap, migrate, or redevelop from scratch. --- 🔄 Key Processes Change Request Cycle Receive request → Analyze problem → Estimate effort → Decision (approve/decline) → Schedule in release → Implement → Test & re‑validate. Code Understanding Before Modification Review codebase → Use clear naming, remove dead code, follow conventions → Estimate impact. Testing/Revalidation Workflow Code review → Regression unit tests → Integration testing → System testing → Confirm no loss of existing functionality. Refactoring vs. Restructuring Refactoring: improve structure without changing behavior. Restructuring: improve both structure and functionality. --- 🔍 Key Comparisons Corrective vs. Preventive Corrective: fixes known bugs reported by users. Preventive: proactive changes to avoid future failures (e.g., software rejuvenation). Adaptive vs. Perfective Adaptive: changes to keep software usable in a new environment (OS, hardware). Perfective: enhancements for better performance, UX, or maintainability. Legacy Freeze vs. Migration Freeze: stop all work, keep running, avoid maintenance cost. Migration: move to new platform, retain design, long‑term cost reduction but high upfront effort (5‑10 yr). Agile Scrum Sprint vs. Traditional Maintenance Cycle Scrum: change cycle fits into a sprint, no separate “maintenance phase”. Traditional: distinct phases (analysis, coding, testing) often with longer lead times. --- ⚠️ Common Misunderstandings “Maintenance is just bug fixing.” – It also includes enhancements, adaptation, and preventive work. “Testing is optional for minor fixes.” – Even tiny changes can introduce new bugs; regression testing is essential. “High technical debt is harmless if the system works.” – Debt accumulates, raising future cost and risk of failure. “Legacy systems must always be rewritten.” – Often cheaper to wrap, freeze, or migrate. --- 🧠 Mental Models / Intuition Entropy Analogy – Codebase gradually becomes “messier” (entropy). When entropy > threshold, rewrite or migrate becomes cheaper than continued tinkering. Cost‑Benefit Slope – Early maintenance (first years) has a shallow cost curve (easy fixes). Later years the slope steepens (harder, costlier changes). “Change Ripple” – Any modification can propagate like a ripple; always test the whole pond, not just the splash point. --- 🚩 Exceptions & Edge Cases Safety‑Critical Systems – May require full system revalidation after any change, not just regression tests. Third‑Party Component Updates – Can reduce effort, but any local modifications to those components must be merged back. Agile Sprint Limits – Very large changes may exceed sprint capacity; may need a separate release plan. --- 📍 When to Use Which Choose Corrective when a concrete defect is reported and must be fixed to meet requirements. Choose Preventive when you foresee failure (e.g., memory leaks) or need to improve reliability. Choose Adaptive for environment changes (OS upgrade, new hardware). Choose Perfective for performance tuning, UI improvements, or refactoring to boost maintainability. Legacy Decision Flow: Assess technical debt & cost trend → If debt < rewrite threshold → Refactor/Perfective. If debt high but business need persists → Wrap or Migrate. If system no longer critical → Freeze. --- 👀 Patterns to Recognize “Most maintenance cost = testing” – Look for answer choices emphasizing testing effort. “Enhancement ≈ adaptive + perfective” – Problems mentioning new features usually map to these two categories. “Legacy → high entropy + missing docs” – Questions describing undocumented, old code hint at legacy‑system strategies. “Technical debt → quick fixes + later rework” – Spot the trade‑off pattern in development timelines. --- 🗂️ Exam Traps Distractor: “Maintenance is cheaper than development.” – False; maintenance is more expensive overall (80‑90 % of life‑cycle cost). Distractor: “Refactoring changes functionality.” – Incorrect; refactoring only restructures code, preserving behavior. Distractor: “Agile eliminates the need for a maintenance phase.” – Misleading; maintenance work still occurs, just embedded in sprints. Distractor: “All legacy systems must be rewritten.” – Wrong; wrapping, freezing, or migrating are viable alternatives. Distractor: “Testing is only needed for new features.” – Wrong; regression testing is essential to ensure existing functionality remains intact.
or

Or, immediately create your own study flashcards:

Upload a PDF.
Master Study Materials.
Start learning in seconds
Drop your PDFs here or
or