CSS Prepare

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).