NivaarExam Prep

25-Comp-B11 Advanced Software Design

Worked solutions to 7 past sittings (2014–2019), 190 questions. Pick a sitting, or start from a topic below.

Topics across the sittings

Topics that come up in more than one sitting, taken from the headings of our worked solutions. A topic counts once per sitting.

Questions by sitting

December 2019

  1. Question 1: Agile Methodologies vs. Conventional Document-Driven Process Models
  2. Question 2: Functional vs. Non-Functional Requirements
  3. Question 3: Software Metrics and the Meaning of "Quantifiable"
  4. Question 4: Use Case and Class Diagrams for a Personal Financial Management Application
  5. Question 5: Quality Concerns Driving Different Design Decisions
  6. Question 6: When White-Box, Black-Box, and Grey-Box Test Cases Can Be Created
  7. Question 7: Software Reuse — Importance, Activities, and the Two Directions of Reuse
  8. Question 8: Design-by-Contract — Definition, Example, Pros and Cons
  9. Question 9: Assertions and How They Implement Design-by-Contract
  10. Question 10: Preconditions, Postconditions, and Their Relationship to Assertions
  11. Question 11: Class Invariant — Definition, Example, and Role in Design-by-Contract
  12. Question 12: Liskov Substitution Principle — A Design That Follows It and One That Violates It
  13. Question 13: What a Design Pattern Is, and Why Design Patterns Matter
  14. Question 14: Creational, Structural, and Behavioural Pattern Classification
  15. Question 15: Factory Method vs. Abstract Factory
  16. Question 16: Decorator vs. Strategy
  17. Question 17: The Façade Pattern for a Personal Financial Management Application
  18. Question 18: MVC Architecture for a Personal Financial Management Application
  19. Question 19: Boundary, Control, and Entity Classes
  20. Question 20: Command and Memento for High-Quality GUI Design
  21. Question 21: Design Strategy for the Three Usability Goals
  22. Question 22: Favoring Object Composition Over Class Inheritance
  23. Question 23: Visibility of Classes, Variables, and Methods
  24. Question 24: Polymorphism, Dynamic Binding, Overloading, and Overriding
  25. Question 25: friend Access in C++ — Advantages, Disadvantages, and Why Java Disallows It
  26. Question 26: Programming to an Interface, Not an Implementation
  27. Question 27: Interface vs. Class, and Simulating a Java Interface in C++
  28. Question 28: Modular Programming in C++ and Java

December 2018

  1. Question 1: Waterfall, Iterative & Incremental, and RUP Lifecycle Models
  2. Question 2: Functional, Quality, Process, Implementation, and Business Requirements
  3. Question 3: Why Quality Requirements Should Be Quantifiable
  4. Question 4: Deriving OOD Classes from a Use Case Diagram
  5. Question 5: Design Decisions, Design Alternatives, and Documented Rationale
  6. Question 6: Test Cases Developable Before vs. After Implementation
  7. Question 7: Two Major Tasks, Benefits, and Challenges of Software Reuse
  8. Question 8: Pros and Cons of Design by Contract vs. Defensive Programming
  9. Question 9: Verifying Contract Fulfillment — Assertions vs. Defensive Checks
  10. Question 10: Precondition, Postcondition, and the Importance of a Class Invariant
  11. Question 11: Implementing the Liskov Substitution Principle Without Knowing Subclasses
  12. Question 12: A Class Design Example With Class Invariants
  13. Question 13: Describing the Observer Pattern in Standard Pattern-Language Form
  14. Question 14: Creational, Structural, and Behavioural Patterns
  15. Question 15: Decorator vs. Proxy Design Patterns
  16. Question 16: Observer vs. Mediator Design Patterns
  17. Question 17: Credit-Card Validation — Template Method Pattern
  18. Question 18: MVC Class Design for a Stock Monitoring Application
  19. Question 19: Why Separate Entity, Control, and Boundary Classes
  20. Question 20: Command and Decorator Patterns for High-Quality GUI Design
  21. Question 21: Usability Goals for a Hospital Patient Registration System
  22. Question 22: Programming to an Interface, Not to an Implementation
  23. Question 23: Encapsulation, Information Hiding, and Message Passing
  24. Question 24: Polymorphism, Dynamic Binding, Overloading, and Overriding
  25. Question 25: Pros and Cons of Friend Functions and Friend Classes in C++
  26. Question 26: Favoring Object Composition Over Class Inheritance, via the Adapter Pattern
  27. Question 27: Multiple Class Inheritance via Single Inheritance and Interfaces in Java
  28. Question 28: Boundary Value Analysis for a Price Input

May 2016

  1. Question 1: Waterfall vs. Spiral Model
  2. Question 2: Functional and Non-Functional Requirements
  3. Question 3: Quantifiable Non-Functional Requirements
  4. Question 4: Use-Case Actors vs. Design Classes (Library Domain)
  5. Question 5: Design Goals in System Design
  6. Question 6: Fault, Error, and Failure
  7. Question 7: Software Reuse
  8. Question 8: Design by Contract vs. Defensive Programming
  9. Question 9: Benefits and Challenges of Design by Contract
  10. Question 10: Precondition, Postcondition, and Class Invariant
  11. Question 11: The Liskov Substitution Principle
  12. Question 12: Invariant Strengthening Under Inheritance
  13. Question 13: Framework, Library, and Design Pattern
  14. Question 14: The Three Types of the Proxy Design Pattern
  15. Question 15: Creational, Structural, and Behavioural Patterns
  16. Question 16: Observer Roles vs. Boundary/Entity Classes
  17. Question 17: Credit-Card Validation — Pattern Selection
  18. Question 18: The Model-View-Controller Architecture
  19. Question 19: Separating Boundary from Entity/Control Classes
  20. Question 20: Design Patterns Paramount to GUI Design
  21. Question 21: Non-Functional Requirements for Human-Machine Interfaces
  22. Question 22: The Open–Closed Principle
  23. Question 23: Encapsulation, Information Hiding, and Message Passing
  24. Question 24: Polymorphism, Dynamic Binding, Overloading, Overriding
  25. Question 25: Friend Functions and Modular Programming
  26. Question 26: Inheritance vs. Delegation
  27. Question 27: Multiple Inheritance in Java
  28. Question 28: Boundary Value Analysis for a Price Input

May 2015

  1. Question 1: Waterfall vs. Spiral Model
  2. Question 2: Functional and Non-Functional Requirements
  3. Question 3: Quantifiable Non-Functional Requirements
  4. Question 4: Use-Case Actors vs. Design Classes (Library Domain)
  5. Question 5: Design Goals in System Design
  6. Question 6: Fault, Error, and Failure
  7. Question 7: Software Reuse
  8. Question 8: Design by Contract vs. Defensive Programming
  9. Question 9: Benefits and Challenges of Design by Contract
  10. Question 10: Precondition, Postcondition, and Class Invariant
  11. Question 11: The Liskov Substitution Principle
  12. Question 12: Invariant Strengthening Under Inheritance
  13. Question 13: Framework, Library, and Design Pattern
  14. Question 14: Two Variants of the Adapter Design Pattern
  15. Question 15: Structural vs. Behavioural Patterns
  16. Question 16: Observer Roles vs. Boundary/Entity Classes
  17. Question 17: Credit-Card Validation — Pattern Selection
  18. Question 18: The Model-View-Controller Architecture
  19. Question 19: Separating Boundary from Entity/Control Classes
  20. Question 20: Design Patterns Paramount to GUI Design
  21. Question 21: Non-Functional Requirements for Human-Machine Interfaces
  22. Question 22: The Open–Closed Principle
  23. Question 23: Encapsulation, Information Hiding, and Message Passing
  24. Question 24: Polymorphism, Dynamic Binding, Overloading, Overriding
  25. Question 25: Friend Functions and Modular Programming
  26. Question 26: Inheritance vs. Delegation
  27. Question 27: Multiple Inheritance in Java

December 2014

  1. Question 1: Incremental vs. Iterative Development
  2. Question 2: Functional and Non-Functional Requirements
  3. Question 3: Extracting Requirements from a Scenario
  4. Question 4: Quantifiable Non-Functional Requirements
  5. Question 5: Agile Methods — Interest and Dangers
  6. Question 6: The Open–Closed Principle
  7. Question 7: Polymorphism, Dynamic Binding, Overloading, Overriding
  8. Question 8: Software Reuse — Benefits and Challenges
  9. Question 9: Use-Case Actors vs. Design Classes
  10. Question 10: Design by Contract
  11. Question 11: The Liskov Substitution Principle
  12. Question 12: Design Goals in System Design
  13. Question 13: Framework, Library, and Design Pattern
  14. Question 14: Uses of the Proxy Design Pattern
  15. Question 15: Structural vs. Behavioural Patterns
  16. Question 16: Observer Roles vs. Boundary/Entity Classes
  17. Question 17: Credit-Card Validation — Pattern Selection
  18. Question 18: Anti-Patterns
  19. Question 19: The Model-View-Controller Architecture
  20. Question 20: Separating Boundary from Entity/Control Classes
  21. Question 21: Design Patterns Paramount to GUI Design
  22. Question 22: Non-Functional Requirements for Human-Machine Interfaces
  23. Question 23: Friend Functions and Modular Programming
  24. Question 24: Inheritance vs. Delegation
  25. Question 25: Java equals/hashCode and HashSet
  26. Question 26: Multiple Inheritance in Java

May 2014

  1. Question 1: Incremental vs. Iterative Development
  2. Question 2: Functional and Non-Functional Requirements
  3. Question 3: Extracting Requirements from a Scenario
  4. Question 4: Quantifiable Non-Functional Requirements
  5. Question 5: Agile Methods — Interest and Dangers
  6. Question 6: The Open–Closed Principle
  7. Question 7: Polymorphism, Dynamic Binding, Overloading, Overriding
  8. Question 8: Software Reuse
  9. Question 9: Use-Case Actors vs. Design Classes
  10. Question 10: Design by Contract
  11. Question 11: The Liskov Substitution Principle
  12. Question 12: Design Goals in System Design
  13. Question 13: Framework, Library, and Design Pattern
  14. Question 14: Uses of the Proxy Design Pattern
  15. Question 15: Structural vs. Behavioural Patterns
  16. Question 16: Observer Roles vs. Boundary/Entity Classes
  17. Question 17: Credit-Card Validation — Pattern Selection
  18. Question 18: The Model-View-Controller Architecture
  19. Question 19: Separating Boundary from Entity/Control Classes
  20. Question 20: Design Patterns Paramount to GUI Design
  21. Question 21: Non-Functional Requirements for Human-Machine Interfaces
  22. Question 22: Friend Functions and Modular Programming
  23. Question 23: Inheritance vs. Delegation
  24. Question 24: Java equals/hashCode and HashSet
  25. Question 25: Multiple Inheritance in Java

Undated paper

  1. Question 1: Design-Activity Differences Between Waterfall and Agile
  2. Question 2: Functional vs. Non-Functional Requirements and Their Role in Design
  3. Question 3: Software Metrics, Their Importance, and Their Relationship to Quality
  4. Question 4: Use Case and Class Diagrams for a Personal Address Book Application
  5. Question 5: Why Multiple Design Alternatives Are Produced, and the Basis for Selecting One
  6. Question 6: Test Cases Derivable From the Design Phase
  7. Question 7: Software Reuse — Definition, Importance, and Major Activities
  8. Question 8: Design-by-Contract — Definition, Example, Pros and Cons
  9. Question 9: Assertions and How They Implement Design-by-Contract
  10. Question 10: Preconditions, Postconditions, and Their Relationship to Assertions
  11. Question 11: Class Invariant — Definition, Example, and Role in Design-by-Contract
  12. Question 12: Liskov Substitution Principle — A Design That Follows It and One That Violates It
  13. Question 13: The Structured Contents of a Pattern Language
  14. Question 14: Class-Inheritance-Based vs. Object-Composition-Based GoF Patterns
  15. Question 15: Factory Method vs. Template Method
  16. Question 16: State vs. Strategy
  17. Question 17: The Façade Pattern for a Personal Address Book Application
  18. Question 18: MVC Architecture for a Personal Address Book Application
  19. Question 19: Boundary, Control, and Entity Classes
  20. Question 20: Command and Memento for High-Quality GUI Design
  21. Question 21: Design Strategy for the Three Usability Goals
  22. Question 22: Favor Object Composition Over Class Inheritance
  23. Question 23: Private, Protected, and Public — Meaning and Role in Encapsulation and Modularity
  24. Question 24: Sample Code for Polymorphism, Dynamic Binding, Overloading, and Overriding
  25. Question 25: C++ Private-Member Access for Other Classes, and Why Java Disallows It
  26. Question 26: Programming to an Interface, Not to an Implementation
  27. Question 27: Java Interface vs. C++ Class, and Simulating Interfaces in C++
  28. Question 28: Implementing Public/Private Module Relationships in C++ and Java