Agile Development Methodology

Reuse-based Approach to Software Development

Prev Question Next Question

Question

Which of the following software development methodology is a reuse-based approach to defining, implementing and composing loosely coupled independent components into systems?

Answers

Explanations

Click on the arrows to vote for the correct answer

A. B. C. D.

D.

Component-based software engineering (CBSE) (also known as component-based development (CBD)) is a branch of software engineering that emphasizes the separation of concerns in respect of the wide-ranging functionality available throughout a given software system.

It is a reuse-based approach to defining, implementing and composing loosely coupled independent components into systems.

This practice aims to bring about an equally wide-ranging degree of benefits in both the short-term and the long-term for the software itself and for organizations that sponsor such software.

Software engineers[who?] regard components as part of the starting platform for service-orientation.

Components play this role, for example, in web services, and more recently, in service-oriented architectures (SOA), whereby a component is converted by the web service into a service and subsequently inherits further characteristics beyond that of an ordinary component.

Components can produce or consume events and can be used for event-driven architectures (EDA)

Definition and characteristics of components An individual software component is a software package, a web service, a web resource, or a module that encapsulates a set of related functions (or data)

All system processes are placed into separate components so that all of the data and functions inside each component are semantically related (just as with the contents of classes)

Because of this principle, it is often said that components are modular and cohesive.

With regard to system-wide co-ordination, components communicate with each other via interfaces.

When a component offers services to the rest of the system, it adopts a provided interface that specifies the services that other components can utilize, and how they can do so.

This interface can be seen as a signature of the component - the client does not need to know about the inner workings of the component (implementation) in order to make use of it.

This principle results in components referred to as encapsulated.

The UML illustrations within this article represent provided interfaces by a lollipop-symbol attached to the outer edge of the component.

However, when a component needs to use another component in order to function, it adopts a used interface that specifies the services that it needs.

In the UML illustrations in this article, used interfaces are represented by an open socket symbol attached to the outer edge of the component.

A simple example of several software components - pictured within a hypothetical holiday-reservation system represented in UML 2.0

Another important attribute of components is that they are substitutable, so that a component can replace another (at design time or run-time), if the successor component meets the requirements of the initial component (expressed via the interfaces)

Consequently, components can be replaced with either an updated version or an alternative without breaking the system in which the component operates.

As a general rule of thumb for engineers substituting components, component B can immediately replace component A, if component B provides at least what component A provided and uses no more than what component A used.

Software components often take the form of objects (not classes) or collections of objects (from object-oriented programming), in some binary or textual form, adhering to some interface description language (IDL) so that the component may exist autonomously from other components in a computer.

When a component is to be accessed or shared across execution contexts or network links, techniques such as serialization or marshalling are often employed to deliver the component to its destination.

Reusability is an important characteristic of a high-quality software component.

Programmers should design and implement software components in such a way that many different programs can reuse them.

Furthermore, component-based usability testing should be considered when software components directly interact with users.

It takes significant effort and awareness to write a software component that is effectively reusable.

The component needs to be: fully documented thoroughly tested robust - with comprehensive input-validity checking able to pass back appropriate error messages or return codes designed with an awareness that it will be put to unforeseen uses The following were incorrect answers: Agile Development - Agile software development is a group of software development methods based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams.

Software prototyping- Software prototyping, refers to the activity of creating prototypes of software applications, i.e., incomplete versions of the software program being developed.

It is an activity that can occur in software development and is comparable to prototyping as known from other fields, such as mechanical engineering or manufacturing.

Rapid application development (RAD) is a software development methodology that uses minimal planning in favor of rapid prototyping.

The "planning" of software developed using RAD is interleaved with writing the software itself.

The lack of extensive per-planning generally allows software to be written much faster, and makes it easier to change requirements.

The correct answer is D. Component-based development.

Component-based development is a software development methodology that focuses on the reuse of pre-existing software components to build complex systems. It is a reuse-based approach to defining, implementing and composing loosely coupled independent components into systems.

In this methodology, software components are designed and developed independently of the specific application or system they will be used in. Components are typically reusable software units that perform specific functions or provide specific services. These components can be combined or "composed" to create complex systems.

The key benefits of component-based development include increased productivity, reduced time-to-market, and improved software quality. By reusing pre-existing software components, development teams can reduce the amount of time and effort required to build complex systems. This results in faster time-to-market, which can be a competitive advantage in many industries.

Additionally, because components are designed to be independent of the specific application or system they will be used in, they can be thoroughly tested and validated before they are integrated into larger systems. This can improve software quality and reduce the risk of defects or bugs.

In contrast, Agile Development, Software prototyping, and Rapid application development are different software development methodologies that focus on iterative development and rapid delivery of software. Agile development is an iterative and collaborative approach to software development, emphasizing customer involvement and responsiveness to change. Software prototyping involves creating a simplified version of the software application to quickly evaluate user feedback and refine requirements. Rapid application development is a software development methodology that emphasizes iterative development and rapid prototyping to create software applications quickly.

In summary, component-based development is a software development methodology that focuses on the reuse of pre-existing software components to build complex systems, resulting in increased productivity, reduced time-to-market, and improved software quality.