INTRODUCTION TO SOFTWARE ENGINEERING NOTE - docxEDITED.docx2
INTRODUCTION TO SOFTWARE ENGINEERING NOTE - docxEDITED.docx2
INTRODUCTION TO SOFTWARE ENGINEERING NOTE - docxEDITED.docx2
The term software engineering is composed of two words, software and engineering.
Software is more than just a program code.
A program is an executable code, which serves some computational purpose.
Software is considered to be a collection of executable programming code, associated libraries and
documentations. Software, when made for a specific requirement is called software product. Engineering on
the other hand, is all about developing products, using well-defined, scientific principles and methods. So, we
can define software engineering as an engineering branch associated with the development of software
product using well-defined scientific principles, methods and procedures. The outcome of software
engineering is an efficient and reliable software product. IEEE defines software engineering as: The application
of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of
software.
Without using software engineering principles, it would be difficult to develop large programs. In industry it is
usually needed to develop large programs to accommodate multiple functions. A problem with developing
such large commercial programs is that the complexity and difficulty levels of the programs increase
exponentially with their sizes. Software engineering helps to reduce this programming complexity.
Software engineering principles use two important techniques to reduce problem complexity:
abstraction and decomposition.
The principle of abstraction implies that a problem can be simplified by omitting irrelevant details. In other
words, the main purpose of abstraction is to consider only those aspects of the problem that are relevant for
certain purpose and suppress other aspects that are not relevant for the given purpose. Once the simpler
problem is solved, then the omitted details can be taken into consideration to solve the next lower level
abstraction, and so on. Abstraction is a powerful way of reducing the complexity of the problem.
The other approach to tackle problem complexity is decomposition. In this technique, a complex problem is
divided into several smaller problems and then the smaller problems are solved one by one. However, in this
technique any random decomposition of a problem into smaller parts will not help. The problem has to be
decomposed such that each component of the decomposed problem can be solved independently and then
the solution of the different components can be combined to get the full solution.
A good decomposition of a problem should minimize interactions among various components. If the different
subcomponents are interrelated, then the different components cannot be solved separately and the desired
reduction in complexity will not be realized.
The need of software engineering arises because of higher rate of change in user requirements and
environment on which the software is working.
Large software - It is easier to build a wall than to a house or building, likewise, as the size of software become
large engineering has to step to give it a scientific process.
Scalability- If the software process were not based on scientific and engineering concepts, it would be easier
to re-create new software than to scale an existing one.
Cost- As hardware industry has shown its skills and huge manufacturing has lower down the price of computer
and electronic hardware. But the cost of software remains high if proper process is not adapted.
Dynamic Nature- The always growing and adapting nature of software hugely depends upon the environment
in which the user works. If the nature of software is always changing, new enhancements need to be done in
the existing one. This is where software engineering plays a good role.
Quality Management- Better process of software development provides better and quality software product.
CHARACTERISTICS OF GOOD SOFTWARE
A software product can be judged by what it offers and how well it can be used. This software must satisfy on
the following grounds:
Operational
Transitional
Maintenance
Well-engineered and crafted software is expected to have the following characteristics:
Operational
This tells us how well software works in operations. It can be measured on: Budget Usability Efficiency
Correctness Functionality Dependability Security Safety
Transitional
This aspect is important when the software is moved from one platform to another: Portability Interoperability
Reusability Adaptability .
Maintenance
This aspect briefs about how well a software has the capabilities to maintain itself in the everchanging
environment: Modularity Maintainability Flexibility Scalability.
In short, Software engineering is a branch of computer science, which uses well-defined engineering concepts
required to produce efficient, durable, scalable, in-budget and on-time software products.
Integration and system testing: -Integration of different modules is undertaken once they have been coded
and unit tested. During the integration and system testing phase, the modules are integrated in
2. ITERATIVE WATERFALL MODEL
To overcome the major shortcomings of the classical waterfall model, we come up with the iterative waterfall
model.
Here, we provide feedback paths for error correction as & when detected later in a phase. Though errors are
inevitable, but it is desirable to detect them in the same phase in which they occur. If so, this can reduce the
effort to correct the bug.
The advantage of this model is that there is a working model of the system at a very early stage of
development which makes it easier to find functional or design flaws. Finding issues at an early stage of
development enables to take corrective measures in a limited budget.
The disadvantage with this SDLC model is that it is applicable only to large and bulky software development
projects. This is because it is hard to break a small software system into further small serviceable
increments/modules.
3. Prototyping Model
A prototyping model can be used when technical solutions are unclear to the development team.
A developed prototype can help engineers to critically examine the technical issues associated
with the product development
4. EVOLUTIONARY MODEL
It is also called successive versions model or incremental model. At first, a simple working model is built.
Subsequently it undergoes functional improvements & we keep on adding new functions till the desired
system is built.
Applications:
Large projects where you can easily find modules for incremental implementation. Often used
when the customer wants to start using the core features rather than waiting for the full software.
Advantages:
User gets a chance to experiment partially developed system
Reduce the error because the core modules get tested thoroughly.
Disadvantages:
It is difficult to divide the problem into several versions that would be acceptable to the customer
which can be incrementally implemented and delivered.
5. SPIRAL MODEL
The Spiral model of software development is shown in Fig. 5. The diagrammatic
representation of this model appears like a spiral with many loops. The exact number of
loops in the spiral is not fixed. Each loop of the spiral represents a phase of the software
process. For example, the innermost loop might be concerned with feasibility study, the
next loop with requirements specification, the next one with design, and so on. Each phase
in this model is split into four sectors (or quadrants) as shown in fig. 4.1. The following
activities are carried out during each phase of a spiral model.
Functional requirements:-
The functional requirements part discusses the functionalities required from the system. The system is
considered to perform a set of high-level functions {fi}. The functional view of the system is shown in Fig. 6.
Each function fi of the system can be considered as a transformation of a set of input data (ii) to the
corresponding set of output data (oi). The user can get some meaningful piece of work done using a high-level
function.
Non-functional requirements:-
Non-functional requirements deal with the characteristics of the system which cannot be
expressed as functions - such as the maintainability of the system, portability of the system, usability of the
system, etc.
Example:
Consider Library Membership Automation Software (LMS) where it should support
the following three options:
New member
Renewal
Cancel membership New member option
Modularization
Modularization is a technique to divide a software system into multiple discrete and independent modules,
which are expected to be capable of carrying out task(s) independently. These modules may work as basic
constructs for the entire software.
Advantage of modularization:
i. Smaller component are easier to maintain
ii. Programs can be divided based on functional aspect
iii. Desired level of abstraction can be brought in the program
Concurrency
concurrency provides capability to the software to execute more than one part of code in parallel to each other.