UNIT1-SW

Software Engineering - Overview

  • Author: Ian Sommerville

  • Edition: Tenth

  • Course Code: BCA213-4

  • Unit: Principles of Software Development - 2

Chapter 16: Software Reuse

  • Software reuse is gaining recognition for the development of better quality software efficiently and economically through systematic reuse processes.

Software Reuse: Key Concepts

  • Systems in engineering are generally designed by utilizing existing components.

  • Traditional software engineering focused more on original developments rather than reuse.

  • A shift towards reuse-based development has occurred, enhancing speed and cost-effectiveness.

Types of Reuse-based Software Engineering

System Reuse

  • Involves reusing complete systems, which may comprise multiple application programs.

Application Reuse

  • Involves incorporating an application into others without modification or developing application families.

Component Reuse

  • Components, ranging from subsystems to single objects, are reusable.

Object and Function Reuse

  • Involves reusing small-scale software components that implement specific functions.

Benefits of Software Reuse

Benefit

Explanation

Accelerated Development

Speeds up system production by reducing both development and validation time.

Effective Use of Specialists

Application specialists develop reusable software, minimizing repetitive work.

Increased Dependability

Reused software is typically more reliable as it has been tested in prior systems.

Lower Development Costs

Fewer code lines need to be written, directly reducing costs.

Reduced Process Risk

Known costs of existing software reduce estimation errors in project management.

Standards Compliance

Reusable components can enhance compliance with user interface standards.

Problems Associated with Reuse

Creating and Maintaining Component Libraries

  • Expensive to populate and maintain; development processes must adapt to utilize them effectively.

Finding and Adapting Reusable Components

  • Requires effort to discover and customize components from libraries.

Increased Maintenance Costs

  • Higher costs can arise if the source code is unavailable, leading to incompatibility issues with system changes.

Lack of Tool Support

  • Some tools do not facilitate the development process for reuse effectively.

Not-invented-here Syndrome

  • Preference for developers to rewrite components due to trust issues or perceived improvement.

Reuse Planning Factors

  • Considerations for reuse include the development schedule, software lifetime, team background, software criticality, application domain, and execution platform.

Base Systems for Software Product Lines

Core Components

  • Provide basic infrastructure support, typically unchanged in new product instances.

Configurable Components

  • Can be modified for specialization with minimal changes.

Specialized Components

  • Domain-specific components that may be entirely replaced when creating a new instance.

ERP Systems Overview

  • ERP systems support common business processes and exemplify software reuse.

  • Core elements adapt through the addition of modules and business process knowledge.

ERP System Architecture

  • Composed of various functional modules, defined business processes, a common database, and applicable business rules.

ERP Configuration Activities

  • Selecting functionality, establishing data models, defining business rules, and managing external interactions are critical in configuring ERP systems.

Integrated Application Systems

  • Combine two or more application systems or legacy systems to meet requirements not addressed by singular solutions.

Component-Based Software Engineering (CBSE)

  • CBSE utilizes the reuse of 'software components,' aiming for efficient development through integration and easy maintenance through replacement.

CBSE Essentials

  • Principles include independent, standardized components; middleware support for integration; clear interfaces; and proper documentation.

Component Characteristics

  • A component must be standardized, independent, composable, deployable, and well-documented.

Component Interfaces

Provides Interface

  • Defines services offered by the component to other components.

Requires Interface

  • Specifies services needed from other components.

Glue Code Definition

  • Glue code integrates diverse components, enabling seamless interaction without altering internal logic.

Types of Component Composition

Sequential Composition

  • Components are arranged in a sequence where output from one becomes input to another.

Hierarchical Composition

  • Components are organized in a parent-child hierarchy.

Additive Composition

  • Combines functionalities of various components to enhance overall system capabilities.

Distributed Software Engineering

  • Involves independent nodes working collaboratively, appearing as a single cohesive unit to users.

Key Features of Distributed Systems

  • Includes decentralization, concurrency, transparency, scalability, fault tolerance, and communication through standard protocols.

Benefits of Distributed Systems

  • Key advantages encompass resource sharing, openness, concurrency, scalability, and fault tolerance.

Challenges in Distributed Systems

  • Design difficulties, security risks, synchronization demands, and fault handling requirements.

Models of Interaction in Distributed Systems

Procedural Interaction

  • Systems communicate synchronously, with one waiting for a response.

Message-Based Interaction

  • Systems send messages independently and process requests asynchronously.

Service-Oriented Architecture (SOA)

  • SOA facilitates distributed services' development using standard protocols, promoting loosely-coupled, reusable services.

Key Features of SOA

  • Emphasizes message-based communication, interoperability, reusability, and scalability.

Components of SOA

  • Involves service registry, communication protocols, quality of service aspects, and business processes management.