Ch.15 - Software Reuse

0.0(0)
studied byStudied by 0 people
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
Card Sorting

1/24

encourage image

There's no tags or description

Looks like no tags are added yet.

Study Analytics
Name
Mastery
Learn
Test
Matching
Spaced

No study sessions yet.

25 Terms

1
New cards

Software Reuse

The process of designing software systems by composing existing, previously used components to improve quality, reduce development time, and lower costs. In recent years, software engineering has shifted significantly toward reuse-based development.

2
New cards

Reuse-Based Software Engineering

An approach to software development where different levels of reusable assets are used, including: complete systems (system reuse), entire applications (application reuse), sub-systems or objects (component reuse), and small-scale components like functions or objects (object and function reuse).

3
New cards

Benefits of Software Reuse

Software reuse offers advantages such as accelerated development (faster production and validation), effective use of specialists (experts create reusable components), and increased dependability (reused components are often more reliable due to prior testing and use).

4
New cards

More Benefits of Software Reuse

Reusing software leads to lower development costs (less code to write), reduced process risk (more accurate cost estimations using known components), and standards compliance (reusable UI components ensure consistency and reduce user error).

5
New cards

Problems with Software Reuse

Reuse can be challenging due to the high cost of creating and maintaining component libraries, the difficulty of finding, understanding, and adapting components, and increased maintenance costs when source code is unavailable or incompatible with system updates.

6
New cards

Additional Problems with Software Reuse

Reuse may be hindered by lack of tool support, especially in embedded systems, and the Not-Invented-Here syndrome, where developers prefer writing original code due to trust issues or the belief that reuse is less intellectually satisfying.

7
New cards

The Reuse Landscape

Reuse in software engineering spans a wide range of approaches and levels—from simple functions to entire application systems. It includes various techniques, not just component reuse, and reflects the diversity of how software reuse can be implemented.

8
New cards

Diagram: The reuse landscape

9
New cards

Approaches to Software Reuse

Techniques used to develop software systems by reusing existing assets at various abstraction levels. These include application frameworks (collections of classes for building applications), application system integration (combining existing applications), architectural patterns (standard software architectures), aspect-oriented development (weaving shared components into code), component-based engineering (integrating standards-compliant components), configurable application systems (tailorable systems for specific users), design patterns (reusable design structures), ERP systems (configurable large-scale business solutions), legacy system wrapping (encapsulating old systems with new interfaces), model-driven engineering (generating code from models), program generators (generating systems from models), program libraries (collections of reusable code), service-oriented systems (systems built from shared/external services), software product lines (generalized applications for various customers), and systems of systems (integration of multiple distributed systems).

10
New cards

Reuse Planning Factors

Key considerations that influence how and to what extent software reuse can be effectively applied in a project. These include the development schedule, expected software lifetime, the team's background and expertise, the criticality of the software along with its non-functional requirements, the application domain, and the execution platform on which the software will run.

11
New cards

Framework

An integrated set of software artifacts—such as classes, objects, and components—that work together to provide a reusable architecture for a family of related applications.

12
New cards

Application Framework

A moderately large, reusable sub-system design that lies between system and component reuse. It consists of abstract and concrete classes with defined interfaces, and is implemented by filling in design parts and instantiating the abstract classes.

13
New cards

Web Application Framework (WAF)

A framework that supports building dynamic websites as frontends for web applications. Available for common web programming languages (e.g., Java, Python, Ruby), WAFs typically follow the Model-View-Controller (MVC) design pattern for structuring interaction.

14
New cards

Model-View-Controller (MVC)

A system infrastructure framework used for GUI design that separates concerns by dividing an application into three interconnected components: the Model (data and logic), View (user interface), and Controller (input handling). It supports multiple presentations of the same data and independent interactions with these views, and is based on the instantiation of various design patterns.

15
New cards

Diagram: The Model-View-Controller pattern

16
New cards

Web Application Framework (WAF) Features

Web Application Frameworks (WAFs) offer built-in support for security (e.g., user authentication and access control), dynamic web page generation using templates and database content, database abstraction for interacting with different databases, session management to handle multiple user interactions, and user interaction enhancements such as AJAX for creating more responsive and interactive web pages.

17
New cards

Extending Frameworks

Extending a framework involves customizing a generic, reusable skeleton architecture by adding concrete classes that inherit from its abstract classes and implementing event-driven methods. While this enables the development of specific applications or subsystems, the complexity of frameworks often leads to a steep learning curve and longer setup times.

18
New cards

Diagram: Inversion of control in frameworks

19
New cards

Framework Classes

Framework classes are categorized into three types based on their purpose: system infrastructure frameworks that aid in building core systems like GUIs and compilers, middleware integration frameworks that facilitate communication and data exchange between components, and enterprise application frameworks that support domain-specific applications such as in finance or telecommunications.

20
New cards

Software Product Lines

Software product lines are sets of related applications that share a common architecture and components, designed with generic functionality that can be adapted, configured, or extended for specific use cases. Adaptation may include configuring systems and components, adding or selecting components from a library, or modifying existing components to meet new requirements.

21
New cards

Diagram: Base systems for a software product line

22
New cards

Base Applications

Base applications are the foundational elements of a software product line, consisting of core components that provide essential infrastructure and are typically left unchanged. They also include configurable components that can be adapted to new applications—often through built-in configuration tools without altering code—and specialized, domain-specific components that may be replaced or modified to suit the requirements of different instances in the product line.

23
New cards

Application Frameworks and Software Product Lines

Application frameworks are reusable, object-oriented software architectures that provide technical support through a collection of abstract and concrete classes, using features like polymorphism to allow developers to extend functionality for related applications. In contrast, software product lines consist of a family of related applications that share a common architecture and core components but are adapted to meet specific domain or platform needs. While frameworks emphasize technical reuse, product lines focus on domain-specific customization and are often used in controlling systems such as embedded or industrial software.

24
New cards

Product Line Architectures

Product line architectures are software architectures designed to support a family of related applications by structuring the system into modular sub-systems that can be independently modified. They separate different sub-systems for flexibility and maintainability, and also separate entities from their descriptions so that higher-level components interact with descriptions rather than accessing entities directly. This promotes reuse and easier adaptation across multiple product variants.

25
New cards