optional · CSS study notes
Software Design Strategies
CSS CS Optional — Paper-I, Section-B, Topic V. How to decompose the system — different question from architectural style.
🔑 Underlying Design Concepts
- Abstraction — expose essential detail, hide the rest.
- Modularity — decompose into independent, well-defined units.
- Coupling — interdependence between modules → lower is better.
- Cohesion — relatedness within one module → higher is better.
- Information hiding (Parnas) — reveal only the interface, hide internals. (design-level ancestor of OOP encapsulation)
- Refactoring — improve internal design without changing external behavior. Tested as standalone MCQ in 2025.
📌 The Strategies
- Top-down — start from whole system, decompose into smaller sub-modules ("stepwise refinement").
- Bottom-up — build smallest reusable components first, combine upward.
- Function-Oriented (structured) — decompose around functions/processes; driven by DFDs; data & functions kept separate.
- Object-Oriented — decompose around objects/entities; data + operations bundled together. (opposite of function-oriented)
- Modularization — guided by coupling/cohesion above.
🔥 Past Papers
- 2025 MCQ — what refactoring means in SDLC.
⚠️ MCQ Trap
- "Keeps data separate from functions" → function-oriented, not object-oriented.
- Refactoring improves code quality/structure, not functionality — doesn't add features or find bugs.
📜 Past-Paper Questions & MCQs (CSS 2016–2026)
2017 · Paper-I · Q6(c) · 6 marks (design patterns part)
Q. Explain the importance of design patterns under the umbrella of Agile software design and programming.
Ans.
- A design pattern is a proven, reusable solution to a common design problem (examples: Singleton, Factory, Observer, Strategy, MVC).
- Importance in Agile:
- gives flexible, well-structured code that is easy to change when requirements change
- supports refactoring towards cleaner design in every iteration
- provides a common vocabulary that speeds up communication ("use a Factory here")
- avoids over-design: patterns are applied only when a need appears (YAGNI)
- improves reuse and testability
- Testing methodologies are on Software Testing (2016-17).