Uploaded by dabutiwari06

Software engineering

advertisement
WHAT IS SOFTWARE?



Software is a set of instructions, data or programs used to operate computers
and execute specific tasks. It is the opposite of hardware, which describes the
physical aspects of a computer.
Software is a generic term used to refer to applications, scripts and programs
that run on a device.
It can be thought of as the variable part of a computer, while hardware is the
invariable part.
The two main categories of software are application software and system software.

An application is software that fulfills a specific need or performs tasks.

System software is designed to run a computer's hardware and provides a
platform for applications to run on top of.

Other types of software include programming software, which provides the
programming tools software developers need;

Middleware, which sits between system software and applications; and

Driver software, which operates computer devices and peripherals.
Examples and types of software
Among the various categories of software, the most common types include the
following:

Application software. The most common type of software, application software
is a computer software package that performs a specific function for a user, or in
some cases, for another application. An application can be self-contained, or it can
be a group of programs that run the application for the user. Examples of modern
applications include office suites, graphics software, databases and database
management programs, web browsers, word processors, software development
tools, image editors and communication platforms.

System software. These software programs are designed to run a computer's
application programs and hardware. System software coordinates the activities and
functions of the hardware and software. In addition, it controls the operations of
the computer hardware and provides an environment or platform for all the other
types of software to work in. The OS is the best example of system software; it
manages all the other computer programs. Other examples of system software
include the firmware, computer language translators and system utilities.

Driver software. Also known as device drivers, this software is often considered
a type of system software. Device drivers control the devices and peripherals
connected to a computer, enabling them to perform their specific tasks. Every
device that is connected to a computer needs at least one device driver to function.
Examples include software that comes with any nonstandard hardware, including
special game controllers, as well as the software that enables standard hardware,
such as USB storage devices, keyboards, headphones and printers.

Middleware. The term middleware describes software that mediates between
application and system software or between two different kinds of application
software. For example, middleware enables Microsoft Windows to talk to Excel and
Word. It is also used to send a remote work request from an application in a
computer that has one kind of OS, to an application in a computer with a different
OS. It also enables newer applications to work with legacy ones.

Programming software. Computer programmers use programming software to
write code. Programming software and programming tools enable developers to
develop, write, test and debug other software programs. Examples of programming
software include assemblers, compilers, debuggers and interpreters.
SOFTWARE AS A PRODUCT:
Software Products are nothing but software systems delivered to the customer with
the documentation that describes how to install and use the system. In certain
cases, software products may be part of system products where hardware, as well as
software, is delivered to a customer. Software products are produced with the help of
the software process. The software process is a way in which we produce software.
Types of software products:
Software products fall into two broad categories:
1.
Generic products:
Generic products are stand-alone systems that are developed by a production unit
and sold on the open market to any customer who is able to buy them.
2.
Customized Products:
Customized products are the systems that are commissioned by a particular
customer. Some contractor develops the software for that customer.
SOFTWARE CRISIS



It is a term used in computer science for the difficulty of writing useful and
efficient computer programs in the required time.
The software crisis was due to using the same workforce, same methods, same
tools even though rapidly increasing in software demand, the complexity of
software, and software challenges.
With the increase in the complexity of software, many software problems arise
because existing methods were insufficient. If we will use the same workforce,
same methods, and same tools after the fast increase in software demand,
software complexity, and software challenges, then there arise some problems
like software budget problems, software efficiency problems, software quality
problems, software managing and delivering problem, etc.
This condition is called a software crisis.
Causes of Software Crisis:










The cost of owning and maintaining software was as expensive as developing
the software
At that time Projects were running over-time
At that time Software was very inefficient
The quality of the software was low quality
Software often did not meet user requirements
The average software project overshoots its schedule by half
At that time Software was never delivered
Non-optimal resource utilization.
Difficult to alter, debug, and enhance.
The software complexity is harder to change.
Which factors are contributing to the software crisis?
Poor project management.
Lack of adequate training in software engineering.
Less skilled project members.
Low productivity improvements.




Why do we need the engineering process?
The process allows for applied science, mathematics and engineering sciences to be
used to achieve a high level of optimization to meet the requirements of an objective.
The steps include problem solving processes such as, for example, determining your
objectives and constraints, prototyping, testing and evaluation.
What is Software Engineering?
The term software
and engineering.
engineering is
the
product
of
two
words, software,

The software is a collection of integrated programs and Software subsists of
carefully-organized instructions and code written by developers on any of
various particular computer languages.

Computer programs and related documentation such as requirements, design
models and user manuals.

Engineering is the application of scientific and practical knowledge to invent,
design, build, maintain, and improve frameworks, processes, etc.



Software Engineering is an engineering branch related to the evolution of
software product.
Software engineering is an Umbrella activity that includes People, Process,
Methods, Technology and tools together towards developing software products.
Software is a paradigm, where all activities are carried away in engineered
way to produce software products.
Essential characteristics of Well-Engineered Software Product:
A well-engineered
characteristics:
software
product
should
possess
the
following
essential

User Friendly: The software products should behave the users as desired.

Efficiency: The software should not make wasteful use of system resources
such as memory and processor cycles.

Maintainability: It should be possible to evolve the software to meet the
changing requirements of customers.

Dependability: It is the flexibility of the software that ought to not cause any
physical or economic injury within the event of system failure. It includes a range
of characteristics such as reliability, security, and safety.
In time: Software should be developed well in time.


Within Budget: The software development costs should not overrun and it
should be within the budgetary limit.

Functionality: The software system should exhibit the proper functionality,
i.e. it should perform all the functions it is supposed to perform.

Adaptability: The software system should have the ability to get adapted to a
reasonable extent with the changing requirements.
More cause for adopting Software Engineering:
Software Engineering is required due to the following reasons:
o
To manage Large software
o
For more Scalability
o
Cost Management
o
To manage the dynamic nature of software
o
For better quality Management
The necessity of software engineering appears because of a higher rate of progress in
user requirements and the environment on which the program is working.
o
Huge Programming: It is simpler to manufacture a wall than to a house or
building, similarly, as the measure of programming become extensive
engineering has to step to give it a scientific process.
o
Adaptability: If the software procedure were not based on scientific and
engineering ideas, it would be simpler to re-create new software than to scale
an existing one.
o
Cost: As the hardware industry has demonstrated its skills and huge
manufacturing has let down the cost of computer and electronic hardware. But
the cost of programming remains high if the proper process is not adapted.
o
Dynamic Nature: The continually growing and adapting nature of
programming hugely depends upon the environment in which the client works.
If the quality of the software is continually changing, new upgrades need to be
done in the existing one.
o
Quality Management: Better procedure of software development provides a
better and quality software product.
Difference between Software Engineering process and Conventional Engineering
Process
1. Software Engineering Process : It is a engineering process which is mainly related
to computers and programming and developing different kinds of applications
through the use of information technology.
2. Conventional Engineering Process: It is a engineering process which is highly
based on empirical knowledge and is about building cars, machines and
hardware.
S. No.
Software Engineering Process
Conventional Engineering Process
1.
Software Engineering Process is a
process
which
majorly
involves
computer
science,
information
technology and discrete mathematics.
Conventional Engineering Process is a
process which majorly involves science,
mathematics and empirical knowledge.
2.
It is mainly related with computers,
programming and writing codes for
building applications.
It is about building cars,
hardware, buildings etc.
3.
In Software Engineering Process
construction and development cost is
low.
In Conventional Engineering Process
construction and development cost is high.
4.
It can involve the application of new
and untested elements in software
projects.
It usually applies only known and tested
principles to meet product requirements.
machines,
S. No.
Software Engineering Process
Conventional Engineering Process
5.
In Software Engineering Process, most
development effort goes into building
new designs and features.
In Conventional Engineering Process, most
development efforts are required to change
old designs.
6.
It majorly emphasize on quality.
It majorly emphasize on mass production.
7.
Product
development
develops
intangible products (software)
Product development develops
products (e.g. bridges, buildings)
8.
Design requirements may change
throughout development process.
Design Requirements are typically welldefined upfront
9.
Testing is an integral part of the
development process.
Testing occurs
completion.
10.
Prototyping is common and helps to
refine requirements.
Prototyping is less common due to cost
and time
11.
Maintenance
and
updates
are
necessary to keep software relevant.
Maintenance
reactive.
12.
Software development often involves
complex logic and algorithms.
Conventional engineering may have more
complex physical properties to deal with.
13.
Software development often follows
established
standards
and
frameworks.
Conventional engineering may have wellestablished regulations and standards.
14.
Software development is typically less
expensive to start, but costs may
increase
with
maintenance
and
updates.
Conventional engineering may be more
expensive to start due to materials and
construction,
but may have lower
maintenance costs.
mainly
after
tangible
product
is typically scheduled or
S. No.
Software Engineering Process
Agile methodologies are commonly
used in software development.
15.
Conventional Engineering Process
Conventional engineering may use more
traditional
project
management
approaches.
Software Complexity:
Software is an intangible product, which is notoriously difficult to measure. However,
one aspect of software which can be easily quantified is its complexity.




It is a way to describe a specific set of characteristics of a code.
It is a natural byproduct of the functional complexity that the code is
attempting to enable.
Complexity reflects the number of entities that comprise the software, and the
number of interactions between them.
The higher the complexity, the more difficult it is to read the code and maintain
it and the higher the likelihood of faults and defects.
Dealing with Software Complexity: Two ways to deal with complexity of a software
product are;
1. Abstraction: Abstraction is about making a program that represents the real
world, but is not identical to the real world.
Abstraction is all about choosing which are the important details to include, and which
we can safely leave out. Including too many details makes a program too complex and
may make the end user experience overwhelming. Leaving out important details will
make a final program ineffective or inaccurate.
It refers to the construction of a simpler version of a problem by ignoring the details.
The principle of constructing an abstraction is popularly known as modelling.
The advantages of abstracting a problem are:

Simplification of a problem by focusing on only one aspect of the problem while
omitting all other aspects. When using the principle of abstraction to
understand a complex problem, we focus our attention on only one or two
specific aspects of the problem and ignore the rest.

Whenever we omit some details of a problem to construct an abstraction, we
construct a model of the problem. In everyday life, we use the principle of
abstraction frequently to understand a problem or to assess a situation.
2. Decomposition: Decomposition is about breaking a problem down into smaller
parts which are more manageable. It’s something we do all the time - taking a
large project and turning it into a to-do list of small, manageable items.
If a problem is decomposed properly it will mean that each component can be tackled
independently of the others - you can work on them on their own, without needing to
know what is happening within another module. Ideally, each part should also be of a
similar level of complexity or detail.
The advantages of decomposing a problem are:

The different modules can be worked on by different people, or teams, at the
same time, which will increase productivity

A small module is easier to think about and solve than a large problem

It may be possible to process modules in parallel to each other, allowing for
faster processing of the problem as a whole.
Software Development Life Cycle (SDLC):

A software development life cycle model (also called process model) is a
descriptive and diagrammatic representation of the software life cycle.

A life cycle model represents all the activities required to make a software
product transit through its life cycle phases.

It also captures the order in which these activities are to be undertaken.

In other words, a life cycle model maps the different activities performed on a
software product from its inception to retirement.
“It can also be defined as a framework that describes the activities performed
at each stage of a software development project”

ISO/IEC 12207 is an international standard for software life-cycle processes. It
aims to be the standard that defines all the tasks required for developing and
maintaining software.

SDLC is a process followed for a software project, within a software
organization.

It consists of a detailed plan describing how to develop, maintain, replace and
alter or enhance specific software.

The life cycle defines a methodology for improving the quality of software and
the overall development process.

SDLC includes a set of distinct phases in a cyclic fashion; such as planning,
defining, designing, building, testing and deployment
Phase Activities:
1. Planning:

It includes identifying user requirements and is performed by the senior
members of the team with inputs from the customer, the sales department,
market surveys and domain experts in the industry.

This information is then used to plan the basic project approach and to conduct
product feasibility study in the economical, operational and technical areas.
2. Defining:

Once the requirement analysis is done the next step is to clearly define and
document the product requirements and get them approved from the customer
or the market analysts.

This is done through an SRS (Software Requirement Specification) document
which consists of all the product requirements to be designed and developed
during the project life cycle.
3. Designing:

SRS is the reference for product architects to come out with the best
architecture for the product to be developed.

Based on the requirements specified in SRS, usually more than one design
approach for the product architecture is proposed and documented in a DDS Design Document Specification.

This DDS is reviewed by all the important stakeholders and based on various
parameters as risk assessment, product robustness, design modularity, budget
and time constraints, the best design approach is selected for the product.

A design approach clearly defines all the architectural modules of the product
along with its communication and data flow representation with the external
and third party modules (if any). The internal design of all the modules of the
proposed architecture should be clearly defined with the minutest of the details
in DDS.
4. Building or Developing the Product

In this stage of SDLC the actual development starts and the product is built.
The programming code is generated as per DDS during this stage. If the design
is performed in a detailed and organized manner, code generation can be
accomplished without much hassle.

Developers must follow the coding guidelines defined by their organization and
programming tools like compilers, interpreters, debuggers, etc. are used to
generate the code. Different high level programming languages such as C, C++,
Pascal, Java and PHP are used for coding. The programming language is chosen
with respect to the type of software being developed.
5. Testing the Product

This stage is usually a subset of all the stages as in the modern SDLC models,
the testing activities are mostly involved in all the stages of SDLC.

It includes modular or unit testing and is followed by integration testing

However, this stage refers to the testing only stage of the product where product
defects are reported, tracked, fixed and retested, until the product reaches the
quality standards defined in the SRS.
6. Deployment at the user site and Maintenance with Review

Once the product is tested and ready to be deployed it is released formally for
the user.

Sometimes product deployment happens in stages as per the business strategy
of that organization.

The product may first be released in a limited segment and tested in the real
business environment.

Then based on the feedback, the product may be released as it is or with
suggested enhancements by the user. After the product is released, its
maintenance is done for the existing customer base.
If any modification due to the change in taste of the user or market can be
taken again as new requirements for which the SDLC will be followed again (Phase 1
starts)….That continues in a cycle.
Download