NivaarExam PrepOfficial exam papers ↗

25-Comp-B11 Advanced Software Design · Undated paper

Question 7 of 28: Software Reuse — Definition, Importance, and Major Activities

Nivaar worked solution (AI-drafted; not reviewed by a licensed engineer)

Notes on this paper

17-Comp-B11 Advanced Software Design — National Exams, May 2019. 3 hours, closed book exam with two aid sheets allowed (written on both sides), no calculator permitted. The paper is organized into five parts, and candidates were instructed to answer any five (5) questions in Part I, any three (3) in Part II, any four (4) in Part III, any two (2) in Part IV, and any five (5) in Part V — only the first questions answered, in each part, as they appear in the answer book are marked. All questions carry equal weight, so the 19 questions actually marked (5+3+4+2+5 of 28) each count for 100/19 ≈ 5.26% of the paper. All 28 questions are answered below for completeness.

Reference texts: Sommerville, Software Engineering (10th ed., Pearson) — software processes, requirements engineering, design principles, testing, dependability, reuse; Pressman, Software Engineering: A Practitioner's Approach (9th ed.) — supplementary process/metrics/quality coverage; Gamma, Helm, Johnson & Vlissides (GoF), Design Patterns: Elements of Reusable Object-Oriented Software — pattern-language structure, the GoF pattern catalogue, and the "favor object composition over class inheritance" / "program to an interface, not an implementation" principles; Sebesta, Concepts of Programming Languages (12th ed.) — polymorphism, dynamic binding, visibility, encapsulation, interfaces; Bertrand Meyer, Object-Oriented Software Construction — design by contract, preconditions/postconditions/class invariants; Barbara Liskov's 1987 substitutability paper for Question 12; Stroustrup, The C++ Programming Language, for friend/access-control semantics (Question 25).

Question 12 prints “Liskpv substitution principle”, a typo in the paper; it is answered as the Liskov substitution principle.

PART I — General Principles (answer any 5 of 7)

Question 7: Software Reuse — Definition, Importance, and Major Activities (Part I)

Question text not reproduced: the examination questions are © Engineers and Geoscientists BC. Open the official past paper (linked at the top of this page) to read the question, then follow the worked solution below.

Software reuse is the practice of building a system, in whole or in part, from existing software artifacts (components, libraries, frameworks, patterns, or entire subsystems) rather than developing every element from scratch for each new project.

Why it matters. Reused components have typically already been implemented, tested, and hardened by earlier use, so reuse reduces development cost and schedule, generally improves reliability (a widely-reused component has already had many of its defects found and fixed), and lets a team concentrate its own original development effort on the parts of the system that are genuinely novel and provide the project's real value.

Major activities. During design: searching an internal or third-party component repository for a candidate that satisfies (or can be adapted to satisfy) the current requirement; assessing a candidate's interface, licensing, and quality before committing to it; and deliberately designing NEW components to be reusable in the first place — generalizing an interface, removing project-specific assumptions, and documenting it for others. During implementation: adapting/wrapping a reused component so its interface matches what the rest of the system expects (rather than editing the reused component's own internals, which would fork it away from future upstream fixes); and integrating and regression-testing the composed system, since a component verified correct in isolation can still misbehave once combined with the rest of the application.