Professional Documents
Culture Documents
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++
Software Reuse 2018-19
CHAPTER 1
INTRODUCTION
Software reuse is the process of creating software systems from existing software rather than
building software systems from scratch. Something that was originally written for a different
project and implementation will usually be recognized as reuse. Code reuse is the idea that a
partial or complete computer program written at one time can be, should be, or is being used in
another program written at a later time. The reuse of programming code is a common technique
which attempts to save time and energy by reducing redundant work. Software assets, or
components, include all software products, from requirements and proposals, to specifications
and designs, high level designs, data formats, algorithms to user manuals and test suites.
Anything that is produced from a software development effort can potentially be reused.
Software developed and used repeatedly by the same people on the same project and
implementation, Product maintenance and new product versions, use of operating systems,
database management systems, and other system tools doesn’t amount to reuse. Software
engineering has been more focused on original development but it is now recognized that to
achieve better software, more quickly and at lower cost, we need to adopt a design process that is
based on systematic software reuse. For systematic reuse to succeed organizations must
recognize that good components, frameworks, and software architectures require time to design,
implement, optimize, validate, apply, maintain, and enhance. Creating reusable software assets
requires a mature organization whose developers and architects can distinguish key sources of
variability and commonality in their application domain. Identifying and separating these
concerns for complex networked applications requires an iterative development process since it's
hard to design reusable artifacts correctly the first time using a top down “waterfall” software
lifecycle model.
In most engineering disciplines, systems are designed by composing existing components that
have been used in other systems.
Software engineering has been more focused on original development but it is now recognized
that to achieve better software, more quickly and at lower cost, we need to adopt a design
process that is based on systematic software reuse.
The whole of an application system may be reused either by incorporating it without change into
other systems (COTS reuse) or by developing application families.
2. Component reuse
Software components that implement a single well-defined object or function may be reused.
CHAPTER 2
LITERATURE SURVEY
a philosophical epilogue which stresses the importance of having realistic expectations about the
benefits of software reuse
Prieto-Diaz et al., [Implementing faceted classification for software reuse, 11]
In this paper an article was published whose central component is a software reuse library
organized around a faceted classification scheme. The system supports search and retrieval of
reusable components and librarian functions such as cataloging and classification.
CHAPTER 3
Why Software Reuse?
A good software reuse process facilitates the increase of productivity, quality, and reliability,
performance and the decrease of costs, effort,risk and implementation time. An initial investment
is required to start a software reuse process, but that investment pays for itself in a few reuses. In
short, the development of a reuse process and repository produces a base of knowledge that
improves in quality after every reuse, minimizing the amount of development work required for
future project and implementations, and ultimately reducing the risk of new project and
implementations that are based on repository knowledge Reusing code saves programming time,
which reduces costs. If one person or team has already solved a problem, and they share the
solution, there's no need to solve the problem again (with some potential caveats see Drawbacks)
. • Sharing code can help prevent bugs by reducing the amount of total code that needs to be
written to perform a set of tasks. Generally, the more code a system contains the more bugs it's
likely to have. The shared code can also be tested separately from the applications which use it.
• Separating code into common libraries lets programmers specialize in their particular strengths.
A security library, for example, can be built by security experts while a user interface which uses
the library can let UI experts focus on their tasks.
• Repeatedly, separating code into specialized libraries lets each be tuned for performance,
security, and special cases. For example, a Python application might delegate graphics
functionality to a C library for performance.
CHAPTER 4
THE REUSE LANDSCAPE
Although reuse is often simply thought of as the reuse of system components, there are many
different approaches to reuse that may be used. Reuse is possible at a range of levels from simple
functions to complete application systems. The reuse landscape covers the range of possible
reuse techniques.
CHAPTER 5
CONCEPT REUSE
When you reuse program or design components, you have to follow the Design decisions made
by the original developer of the component. This may limit the opportunities for reuse.
However, a more abstract form of reuse is concept reuse where a particular approach is described
in an implementation independent way and an implementation is then developed.
The two main approaches to concept reuse are:
Design patterns
Generative programming
DESIGN PATTERN
A design pattern is a way of reusing abstract knowledge about a problem and its solution.
A pattern is a description of the problem and the essence of its solution
. It should be sufficiently abstract to be reused in different settings. Patterns often rely on object
characteristics such as inheritance and Polymorphism
The image below describes an example of a design pattern.
Pattern elements
Name – A meaningful pattern identifier
Problem description.
Solution description. – Not a concrete design but a template for a design solution
that can be instantiated in different ways.
Consequences – The results and trade-offs of applying the pattern.
OBSERVER PATTERN
The observer pattern is a software design pattern in which an object, called the subject, maintains
a list of its dependents, called observers, and notifies them automatically of any state changes,
usually by calling one of their methods.
It is mainly used to implement distributed event handling systems, in "event driven" software.
In those systems, the subject is usually called a "stream of events" or "stream source of events",
while the observers are called "sink of events". The stream nomenclature simulates or adapts to a
physical setup where the observers are physically separated and have no control over the emitted
events of the subject/stream-source. This pattern then perfectly suits any process where data
arrives through I/O, that is, where data is not available to the CPU at startup, but can arrive
"randomly" (HTTP requests, GPIO data, user input from keyboard/mouse, distributed databases
and blockchains). Most modern languages have built-in "event" constructs which implement the
observer pattern components. While not mandatory most 'observers' implementations will use
background threads listening for subject events and other support mechanism from the
kernel(Linux,epoll).
CHAPTER 6
APPLICATION FRAMEWORKS
Frameworks are moderately large entities that can be reused. They are somewhere between
system and component reuse. Frameworks are a sub-system design made up of a collection of
abstract and concrete classes and the interfaces between them. The sub-system is implemented
by adding components to fill in parts of the design and by instantiating the abstract classes in the
framework.
Application frameworks are moderately large entities that can be reused. They are somewhere
between system and component reuse. Frameworks are a sub-system design made up of a
collection of abstract and concrete classes and the interfaces between them. The sub-system is
implemented by adding components to fill in parts of the design and by instantiating the abstract
classes in the framework.
Frameworks are generic and are extended to create a more specific application or sub-system.
They provide a skeleton architecture for the system. Extending the framework involves Adding
concrete classes that inherit operations from abstract classes in the framework; Adding methods
that are called in response to events that are recognized by the framework. Problem with
frameworks is their complexity which means that it takes a long time to use them effectively.
Framework Classes
The following are the different classes of frameworks:-
CHAPTER 7
Model-view-controller (MVC)
Model–View–Controller (usually known as MVC) is a software design pattern commonly used
for developing user interfaces which divides the related program logic into three interconnected
elements. This is done to separate internal representations of information from the ways
information is presented to and accepted from the user. Following the MVC architectural pattern
decouples these major components allowing for code reuse and parallel development.
Traditionally used for desktop graphical user interfaces (GUIs), this pattern has become popular
for designing web applications. Popular programming languages like JavaScript, Python, Ruby,
and PHP, Java, and C# have MVC frameworks that are used in web application development
straight out of the box.
The same (or similar) view for one application can be refactored for another application with
different data because the view is simply handling how the data is being displayed to the user.
Unfortunately this does not work when that code is also useful for handling user input. For
example, DOM code (including the application's custom abstractions to it) is useful for both
graphics display and user input. (Note that, despite the name Document Object Model, the DOM
is actually not an MVC model, because it is the application's interface to the user).
To address these problems, MVC (and patterns like it) are often combined with a component
architecture that provides a set of UI elements. Each UI element is a single higher-level
component that combines the 3 required MVC components into a single package. By creating
these higher-level components that are independent of each other, developers are able to reuse
components quickly and easily in other applications.
Components of MVC
Model
The central component of the pattern. It is the application's dynamic data structure, independent
of the user interface.It directly manages the data, logic and rules of the application.
View
Any representation of information such as a chart, diagram or table. Multiple views of the same
information are possible, such as a bar chart for management and a tabular view for accountants.
Controller
Accepts input and converts it to commands for the model or view.
In addition to dividing the application into these components, the model–view–controller design
defines the interactions between them.
The model is responsible for managing the data of the application. It receives user input from the
controller.
The view means presentation of the model in a particular format.
The controller responds to the user input and performs interactions on the data model objects.
The controller receives the input, optionally validates it and then passes the input to the model.
As with other software patterns, MVC expresses the "core of the solution" to a problem while
allowing it to be adapted for each system.[8] Particular MVC designs can vary significantly from
the traditional description here
CHAPTER 8
APPLICATION SYSTEM REUSE
An application system product is a software system that can be adapted for different customers
without changing the source code of the system. Application systems have generic features and
so can be used/reused in different environments. Application system products are adapted by
using built-in configuration mechanisms that allow the functionality of the system to be tailored
to specific customer needs.
The whole of an application system may be reused by incorporating it without changing into
other systems or by configuring the application for different customers. Alternatively,
application families that have a common architecture, but which are tailored for specific
customers, may be developed.
Product line architectures must be structured in such a way to separate different sub-systems
and to allow them to be modified. The architecture should also separate entities and their
descriptions and the higher levels in the system access entities through descriptions rather
than directly.
Various types of specialization of a software product line may be developed:
• Different versions of the application are developed for different platforms.
• Different versions of the application are created to handle different operating environments
e.g. different types of communication equipment.
• Different versions of the application are created for customers with different functional
requirements.
Software product lines are designed to be reconfigurable. This configuration may occur at
different stages in the development process:
• Design time configuration: The organization that is developing the software modifies a
common product line core by developing, selecting or adapting components to create a new
system for a customer.
• Deployment time configuration: A generic system is designed for configuration by a
customer or consultants working with the customer. Knowledge of the customer's specific
requirements and the system's operating environment is embedded in configuration data that
are used by the generic system..
Key points
• Advantages of reuse are lower costs, faster software development and lower risks.
• Design patterns are high-level abstractions that document successful design solutions.
• Program generators are also concerned with software reuse – the reusable concepts are
embedded in a generator system.
• Application frameworks are collections of concrete and abstract objects that are designed for
reuse through specialization.
• COTS product reuse is concerned with the reuse of large, off-the-shelf systems.
• Problems with COTS reuse include lack of control over functionality, performance, and
evolution and problems with inter-operation.
• ERP systems are created by configuring a generic system with information about a customer’s
business.
• Software product lines are related applications developed around a common core of shared
functionality
Benefits of application system reuse
• As with other types of reuse, more rapid deployment of a reliable system may be possible.
• It is possible to see what functionality is provided by the applications and so it is easier to judge
whether or not they are likely to be suitable.
• Some development risks are avoided by using existing software. However, this approach has its
own risks, as I discuss below.
• Businesses can focus on their core activity without having to devote a lot of resources to IT
systems development.
•As operating platforms evolve, technology updates may be simplified as these are the
responsibility of the COTS product vendor rather than the customer
CHAPTER 9
NIGHT VISION EQUIPMENT
Goggles - While goggles can be handheld, they are most often worn on the head. Goggles are
binocular (two eye-pieces) and may have a single lens or stereo lens, depending on the model.
Goggles are excellent for constant viewing, such as moving around in a dark building.
Cameras - Cameras with night-vision technology can send the image to a monitor for display
or to a VCR for recording. When night-vision capability is desired in a permanent location,
such as on a jungle,building or as part of the equipment in a helicopter, cameras are used.
Many of the newer camcorders have night vision built right in.
CHAPTER 10
APPLICATIONS
The main purpose for the development of this technology was for the military use, to locate
enemies at night. Not only is it used extensively for military purposes, but also for navigation,
surveillance and targeting. Thermal imaging and Image enhancement technologies are used for
surveillance purpose by the police and security departments. It is also used for the
maneuverability of the hunters and nature enthusiasts through the woods at night. Following are
some other applications of the night-vision
Law-Enforcement
Wildlife Observation
Security
Hidden Object detection, Entertainment, etc
Law-Enforcement
To support law enforcement during the hours of darkness and low light situations and help them
detect, deter and prevent the disruption of a enemy. When an event is designated, the Secret
Service assumes the role as the lead agency for the design and implementation of the operational
security plan. The challenge around events is security on all fronts. During daylight hours and
within areas of full light, the playing field is fairly level; however, remove the element of light
and someone has the advantage. During events, The challenge is to eliminate low light situations
as a potential threat. Prevention, readiness and diligence are the key factors in securing an event
from a terrorist threat. Night vision surveillance is a crucial means of protecting an area and its
assets before, after and during an event. Night vision techniques give law enforcement the
advantage of monitoring activity in darkness and areas of low light. The most effective way to
prepare for and provide effective security for an event is to ensure that law enforcement officials
have the equipment and training they need long before an event takes place. Therefore with the
help of night vision techniques best surveillances can be done in low light conditions.
Wildlife Observation
Keen-eyed observer can see much wildlife during the day .but many animals, including most
large mammals, are more active at night or twilight. Night-vision binoculars give the option of
continuing our observations after the sun has set and the chance to see elusive creatures that are
less active during the day. Once a good pair of night-vision binoculars is acquired we can find
the best spots to spot critters.
Security
There are lots of challenges in performing video surveillance at night. The optimal solution for a
particular application depens night vision cameras.They are built for the specific application. The
night vsion camera provide best surveillance during night or low light condition. After sunrise,
night vision cameras filter out mid-infrared wavelengths so that they don't distort the daytime
images and colors. This “filtering” allows the lens to pick up the same colors as the human eye
and so record natural looking images.
CHAPTER 11
TECHNICAL CHARACTERISTICS
Using intensified night vision is different from using regular binoculars and/or your own eyes.
Below are some of the aspects of night vision that you should be aware of when you are using an
image intensified night vision system.
Depth Perception
Night vision does not present normal depth perception.
Honeycomb*
Honeycomb is a faint hexagonal pattern, which is the result of the manufacturing process.
Spots*
A few black spots throughout the image area also are inherent characteristics of all night vision
technology. These spots will not increase in size or number.
Do not be concerned if you see this feature. It is an inherent characteristic found in light
amplification night vision systems that incorporate a microchannel plate in the
intensifier.
Disadvantages:
The big disadvantage is that its Initial cost too high.
Image is not good quality with NVT
Its excessive use is not good for human health , especially eye
Image size slightly vary from its actual size
CHAPTER 12
CONCLUSION AND FUTURE SCOPE
In this Paper, we consider a few concepts, process and principles that have a positive impact on
Software reuse. We have reviewed the software reuse & reusability, the current trends and
existing problems, and specific difficulties, which are helpful for increasing reuse and
reusability.
Today in the 21st century we have come a long way in the development of software reuse, from
the early 1980s.Using a mixture of technical practices, collaboration, and pragmatism it is
possible to slowly grow your reusable asset base.
Code reuse sometimes results in dependency on the component being reused. Rob Pike opined
that "A little copying is better than a little dependency". When he joined Google, the company
was putting heavy emphasis on code reuse.
Software reusability more specifically refers to design features of a software element (or
collection of software elements) that enhance its suitability for reuse.
BIBLIOGRAPHY
Journal Papers:
Websites Searched:
www.ieee.org
www.google.com
www.wikipedia.com
https://www.infoq.com/articles/vijay-narayanan-software-reuse
www.wikihow.com