Which of the following software development methodology is a reuse-based approach to defining,
implementing and composing loosely coupled independent components into systems?
Correct Answer: D
Section: Information System Acquisition, Development and Implementation
Explanation/Reference:
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 following reference(s) were/was used to create this question:
CISA review manual 2014 Page number 194