UNIT 1
UNIT 1
UNIT 1
UNIT-1 INTRODUCTION
What is Software Engineering?
The term software engineering is the product of two words, software, and
engineering. The software is a collection of integrated programs.
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 using well-defined scientific principles, techniques, and
procedures. The result of software engineering is an effective and reliable
software product.
Software Engineering is the process of designing, developing, testing, and
maintaining software. It is a systematic and disciplined approach to
software development that aims to create high-quality, reliable, and
maintainable software.
1. Software engineering includes a variety of techniques, tools, and
methodologies, including requirements analysis, design, testing, and
maintenance.
2. It is a rapidly evolving field, and new tools and technologies are constantly
being developed to improve the software development process.
3. By following the principles of software engineering and using the
appropriate tools and methodologies, software developers can create high-
quality, reliable, and maintainable software that meets the needs of its
users.
4. Software Engineering is mainly used for large projects based on software
systems rather than single programs or applications.
5. The main goal of Software Engineering is to develop software applications
for improving quality, budget, and time efficiency.
6. Software Engineering ensures that the software that has to be built should
be consistent, correct, also on budget, on time, and within the required
requirements.
1. As a Product
Software components
In software engineering, software components refer to modular, self-contained
parts of a software system that can be independently developed, tested, and
reused. They are designed to perform specific functions and interact with other
components to form a complete system.
1. Libraries/Frameworks:
Libraries are collections of pre-written code that developers can use to
perform common tasks, like handling input/output or working with
databases. A framework is a more extensive structure that provides a
foundation for building applications, often with predefined conventions
and tools.
2. Modules:
These are smaller, logical components of a software system that typically
handle a specific feature or functionality, such as user authentication or
data processing.
3. Services (in Service-Oriented Architecture - SOA):
Services are autonomous, self-contained components that communicate
with other services or clients over a network. Each service focuses on a
specific task (e.g., payment processing or data storage).
4. Micro-services:
An architectural style where the software is composed of small,
independent services that work together. Each micro-service is responsible
for a specific business function and can be developed, deployed, and scaled
independently.
5. APIs (Application Programming Interfaces):
An API is an interface that allows different software components or
systems to communicate with one another. APIs define the methods and
data formats required for interaction between components or services.
6. Objects (in Object-Oriented Programming):
In object-oriented programming (OOP), components are often represented
as objects that encapsulate both data and the methods that operate on the
data. These objects interact with each other through method calls.
7. Database Components:
These include components like tables, stored procedures, views, and other
database objects that store and manage data within a software system.
8. User Interface (UI) Components:
These are components dedicated to presenting information to users and
accepting user inputs. Examples include buttons, forms, tables, and dialog
boxes.
9. Middleware:
Software that acts as a bridge between different applications or between
an application and a database, providing communication and data
management services.
10.External Systems:
Sometimes components are external to the core system but still part of the
overall architecture. These can include third-party services or external
libraries integrated into the system.
Suppose we use the same workforce, same methods, and same tools after the
fast increase in software demand, software complexity, and software challenges.
In that case, there arise some issues like software budget problems, software
efficiency problems, software quality problems, software management, and
delivery problems, etc. This condition is called a Software Crisis.
Quality: Many software products have poor quality, i.e., the software products
defects after putting into use due to ineffective testing technique. For example,
Software testing typically finds 25 errors per 1000 lines of code.
Cost: Software development is costly i.e. in terms of time taken to develop and
the money involved. For example, Development of the FAA's Advanced
Automation System cost over $700 per lines of code.
Delayed Delivery: Serious schedule overruns are common. Very often the
software takes longer than the estimated time to develop, which in turn leads to
cost shooting up. For example, one in four large-scale development projects is
never completed.
There is no single solution to the crisis. One possible solution to a software crisis is
Software Engineering because software engineering is a systematic, disciplined,
and quantifiable approach. For preventing software crises, there are some
guidelines:
Software Processes
The term software specifies to the set of computer programs, procedures and
associated documents (Flowcharts, manuals, etc.) that describe the program and
how they are to be used.
A software process is the set of activities and associated outcome that produce a
software product. Software engineers mostly carry out these activities. These are
four key process activities, which are common to all software processes. These
activities are:
1. The waterfall approach: This takes the above activities and produces them
as separate process phases such as requirements specification, software
design, implementation, testing, and so on. After each stage is defined, it is
"signed off" and development goes onto the following stage.
2. Evolutionary development: This method interleaves the activities of
specification, development, and validation. An initial system is rapidly
developed from a very abstract specification.
3. Formal transformation: This method is based on producing a formal
mathematical system specification and transforming this specification,
using mathematical methods to a program. These transformations are
'correctness preserving.' This means that you can be sure that the
developed programs meet its specification.
4. System assembly from reusable components: This method assumes the
parts of the system already exist. The system development process target
on integrating these parts rather than developing them from scratch.
Similarities Between Software Engineering Process and
Conventional Engineering Process
Software Engineering Process is an engineering process that is mainly related to
computers and programming and developing different kinds of applications
through the use of information technology.
In other words, a life cycle model maps the various activities performed on a
software product from its inception to retirement. Different life cycle models may
plan the necessary development activities to phases in different ways. Thus, no
element which life cycle model is followed, the essential activities are contained
in all life cycle models though the action may be carried out in distinct orders in
different life cycle models. During any life cycle stage, more than one activity may
also be carried out.
Need of SDLC
The development team must determine a suitable life cycle model for a particular
plan and then observe to it.
Without using an exact life cycle model, the development of a software product
would not be in a systematic and disciplined manner. When a team is developing
a software product, there must be a clear understanding among team
representative about when and what to do. Otherwise, it would point to chaos
and project failure. This problem can be defined by using an example. Suppose a
software development issue is divided into various parts and the parts are
assigned to the team members. From then on, suppose the team representative is
allowed the freedom to develop the roles assigned to them in whatever way they
like. It is possible that one representative might start writing the code for his part,
another might choose to prepare the test documents first, and some other
engineer might begin with the design phase of the roles assigned to him. This
would be one of the perfect methods for project failure.
A software life cycle model describes entry and exit criteria for each phase. A
phase can begin only if its stage-entry criteria have been fulfilled. So without a
software life cycle model, the entry and exit criteria for a stage cannot be
recognized. Without software life cycle models, it becomes tough for software
project managers to monitor the progress of the project.
SDLC Cycle
SDLC Cycle represents the process of developing software. SDLC framework
includes the following steps:
Planning for the quality assurance requirements and identifications of the risks
associated with the projects is also done at this stage.
Business analyst and Project organizer set up a meeting with the client to gather
all the data like what the customer wants to build, who will be the end user, what
is the objective of the product. Before creating a product, a core understanding or
knowledge of the product is very necessary.
Once the requirement analysis is done, the next stage is to certainly represent
and document the software requirements and get them accepted from the
project stakeholders.
The next phase is about to bring down all the knowledge of requirements,
analysis, and design of the software project. This phase is the product of the last
two, like inputs from the customer and requirement gathering.
In this phase of SDLC, the actual development begins, and the programming is
built. The implementation of design begins concerning writing code. Developers
have to follow the coding guidelines described by their management and
programming tools like compilers, interpreters, debuggers, etc. are used to
develop and implement the code.
Stage5: Testing
After the code is generated, it is tested against the requirements to make sure
that the products are solving the needs addressed and gathered during the
requirements stage.
During this stage, unit testing, integration testing, system testing, acceptance
testing are done.
Stage6: Deployment
Once the software is certified, and no bugs or errors are stated, then it is
deployed.
Stage7: Maintenance
Once when the client starts using the developed systems, then the real issues
come up and requirements to be solved from time to time.
This procedure where the care is taken for the developed product is known as
maintenance.
SDLC Models
Software Development life cycle (SDLC) is a spiritual model used in project
management that defines the stages include in an information system
development project, from an initial feasibility study to the maintenance of the
completed application.
There are different software development life cycle models specify and design,
which are followed during the software development phase. These models are
also called "Software Development Process Models." Each process model follows
a series of phase unique to its type to ensure success in the step of software
development.
Waterfall model
Winston Royce introduced the Waterfall Model in 1970.This model has five
phases: Requirements analysis and specification, design, implementation, and
unit testing, integration and system testing, and operation and maintenance. The
steps always follow in this order and do not overlap. The developer must
complete every phase before the next phase begins. This model is named
"Waterfall Model", because its diagrammatic representation resembles a cascade
of waterfalls.
2. Design Phase: This phase aims to transform the requirements gathered in the
SRS into a suitable form which permits further coding in a programming language.
It defines the overall software architecture together with high level and detailed
design. All this work is documented as a Software Design Document (SDD).
Some Circumstances where the use of the Waterfall model is most suited are:
This model is simple to implement also the number of resources that are
required for it is minimal.
The requirements are simple and explicitly declared; they remain
unchanged during the entire project development.
The start and end points for each phase is fixed, which makes it easy to
cover progress.
The release date for the complete product, as well as its final cost, can be
determined before development.
It gives easy to control and clarity for the customer due to a strict reporting
system.
Prototype Model
The prototype model requires that before carrying out the development of actual
software, a working prototype of the system should be built. A prototype is a toy
implementation of the system. A prototype usually turns out to be a very crude
version of the actual system, possible exhibiting limited functional capabilities,
low reliability, and inefficient performance as compared to actual software. In
many instances, the client only has a general view of what is expected from the
software product. In such a scenario where there is an absence of detailed
information regarding the input to the system, the processing needs, and the
output requirement, the prototyping model may be employed.
Steps of Prototype Model
Spiral Model
The spiral model, initially proposed by Boehm, is an evolutionary software process
model that couples the iterative feature of prototyping with the controlled and
systematic aspects of the linear sequential model. It implements the potential for
rapid development of new versions of the software. Using the spiral model, the
software is developed in a series of incremental releases. During the early
iterations, the additional release may be a paper model or prototype. During later
iterations, more and more complete versions of the engineered system are
produced.
Each cycle in the spiral is divided into four parts:
Objective setting: Each cycle in the spiral starts with the identification of purpose
for that cycle, the various alternatives that are possible for achieving the targets,
and the constraints that exists.
Risk Assessment and reduction: The next phase in the cycle is to calculate these
various alternatives based on the goals and constraints. The focus of evaluation in
this stage is located on the risk perception for the project.
Development and validation: The next phase is to develop strategies that resolve
uncertainties and risks. This process may include activities such as benchmarking,
simulation, and prototyping.
Planning: Finally, the next step is planned. The project is reviewed, and a choice
made whether to continue with a further period of the spiral. If it is determined
to keep, plans are drawn up for the next step of the project.
The risk-driven feature of the spiral model allows it to accommodate any mixture
of a specification-oriented, prototype-oriented, simulation-oriented, or another
type of approach. An essential element of the model is that each period of the
spiral is completed by a review that includes all the products developed during
that cycle, including plans for the next cycle. The spiral model works for
development as well as enhancement projects.
Advantages
Disadvantages
Iterative Model
Incremental Model
Spiral Model
Iterative Model
In the iterative model first, we take the initial requirements then we enhance the
product over multiple iterations until the final product gets ready. In every
iteration, some design modifications were made and some changes in functional
requirements is added. The main idea behind this approach is to build the final
product through multiple iterations that result in the final product being almost
the same as the user wants with fewer errors and the performance, and quality
would be high.
Incremental Model
In the incremental model, we first build the project with basic features and then
evolve the project in every iteration, it is mainly used for large projects. The first
step is to gather the requirements and then perform analysis, design, code, and
test and this process goes the same over and over again until our final project is
ready.
Spiral Model
The spiral model is a combination of waterfall and iterative models and in this, we
focused on risk handling along with developing the project with the incremental
and iterative approach, producing the output quickly as well as it is good for big
projects. The software is created through multiple iterations using a spiral
approach. Later on, after successive development the final product will develop,
and the customer interaction is there so the chances of error get reduced.
Advantages of the Evolutionary Process Model
In this Model, you can start with some of the software specifications and develop
the first version of the software. After the first version if there is a need to change
the software, then a new version of the software is created with a new iteration.
Every release of the Iterative Model finishes in an exact and fixed period that is
called iteration.
The Iterative Model allows the accessing earlier phases, in which the variations
made respectively. The final output of the project renewed at the end of the
Software Development Life Cycle (SDLC) process.
2. Design: In the design phase, team design the software by the different
diagrams like Data Flow diagram, activity diagram, class diagram, state transition
diagram, etc.
3. Implementation: In the implementation, requirements are written in the coding
language and transformed into computer programmes which are called Software.
4. Testing: After completing the coding phase, software testing starts using
different test methods. There are many test methods, but the most common are
white box, black box, and grey box test methods.
5. Deployment: After completing all the phases, software is deployed to its work
environment.
Mobile app development: Updates and improvements are often needed for
mobile apps to stay current with new devices, operating system versions
and user preferences. By using an iterative process developers can release
the beta versions of their apps, get user feedback and then improve
functionality of those iterations in future release.
Web Application Development: The requirements for developing web
applications frequently change as a result of shifting user demand and
advancements in technology. The Iterative Enhancement Model makes it
possible to developed features incrementally and guaranteeing that the
application can be modified to satisfy changing user and market demands.
In later iterations it also makes it easier to incorporate new features based
on input from users.
E-commerce Platforms: Development in e-commerce field often involves
constant updates. Implementing an iterative approach enables the
introduction of new functionality.