Introduction To Software Engineering
Introduction To Software Engineering
1. Maintainability –
It should be feasible for the software to evolve to meet changing requirements.
2. Correctness –
A software product is correct, if the different requirements as specified in the SRS
document have been correctly implemented.
3. Reusability –
A software product has good reusability, if the different modules of the product can
easily be reused to develop new products.
4. Testability –
Here software facilitates both the establishment of test criteria and the evaluation of
the software with respect to those criteria.
5. Reliability –
It is an attribute of software quality. The extent to which a program can be expected
to perform its desired function, over an arbitrary time period.
6. Portability –
In this case, software can be transferred from one computer system or environment
to another.
7. Adaptability –
In this case, software allows differing system constraints and user needs to be
satisfied by making changes to the software.
Classification of Software
The software is used extensively in several domains including hospitals, banks, schools,
defence, finance, stock markets and so on. It can be categorized into different types:
1. System Software –
System Software is necessary to manage the computer resources and support the
execution of application programs. Software like operating systems, compilers,
editors and drivers etc., come under this category. A computer cannot function
without the presence of these. Operating systems are needed to link the machine
dependent needs of a program with the capabilities of the machine on which it runs.
Compilers translate programs from high-level language to machine language.
2. Networking and Web Applications Software –
Networking Sofware provides the required support necessary for computers to
interact with each other and with data storage facilities. The networking software is
also used when software is running on a network of computers (such as World Wide
Web). It includes all network management software, server software, security and
encryption software and software to develop web-based applications like HTML,
PHP, XML, etc.
3. Embedded Software –
This type of software is embedded into the hardware normally in the Read Only
Memory (ROM) as a part of a large system and is used to support certain
functionality under the control conditions. Examples are software used in
instrumentation and control applications, washing machines, satellites, microwaves,
washing machines etc.
4. Reservation Software –
A Reservation system is primarily used to store and retrieve information and perform
transactions related to air travel, car rental, hotels, or other activities. They also
provide access to bus and railway reservations, although these are not always
integrated with the main system. These are also used to relay computerized
information for users in the hotel industry, making a reservation and ensuring that
the hotel is not overbooked.
5. Business Software –
This category of software is used to support the business applications and is the
most widely used category of software. Examples are software for inventory
management, accounts, banking, hospitals, schools, stock markets, etc.
6. Entertainment Software –
Education and entertainment software provides a powerful tool for educational
agencies, especially those that deal with educating young children. There is a wide
range of entertainment software such as computer games, educational games,
translation software, mapping software, etc.
7. Artificial Intelligence Software –
Software like expert systems, decision support systems, pattern recognition
software, artificial neural networks, etc. come under this category. They involve
complex problems which are not affected by complex computations using non-
numerical algorithms.
8. Scientific Software –
Scientific and engineering software satisfies the needs of a scientific or engineering
user to perform enterprise specific tasks. Such software is written for specific
applications using principles, techniques and formulae specific to that field.
Examples are software like MATLAB, AUTOCAD, PSPICE, ORCAD, etc.
9. Utilities Software –
The programs coming under this category perform specific tasks and are different
from other software in terms of size, cost and complexity. Examples are anti-virus
software, voice recognition software, compression programs, etc.
10. Document Management Software –
A Document Management Software is used to track, manage and store documents
in order to reduce the paperwork. Such systems are capable of keeping a record of
the various versions created and modified by different users (history tracking). They
commonly provide storage, versioning, metadata, security, as well as indexing and
retrieval capabilities.
1. Commercial –
It represents the majority of software which we purchase from software companies,
commercial computer stores, etc. In this case, when a user buys a software, they
acquire a license key to use it. Users are not allowed to make the copies of the
software. The copyright of the program is owned by the company.
2. Shareware –
Shareware software is also covered under copyright but the purchasers are allowed
to make and distribute copies with the condition that after testing the software, if the
purchaser adopts it for use, then they must pay for it.
In both of the above types of software, changes to software are not allowed.
3. Freeware –
In general, according to freeware software licenses, copies of the software can be
made both for archival and distribution purposes but here, distribution cannot be for
making a profit. Derivative works and modifications to the software are allowed and
encouraged. Decompiling of the program code is also allowed without the explicit
permission of the copyright holder.
4. Public Domain –
In case of public domain software, the original copyright holder explicitly relinquishes
all rights to the software. Hence software copies can be made both for archival and
distribution purposes with no restrictions on distribution. Modifications to the
software and reverse engineering are also allowed.
Software components:-
Software components of a computer system have no physical presence, they are stored
in digital form within computer memory. There are different categories of software,
including system software, utilitiesand applications software. Software can also be
described as being either generic or bespoke.
System software is the software used to manage and control the hardware
components and which allow interaction between the hardware and the other types of
software. The most obvious type of system software is the computer's operating
system but device drivers are also included within this category.
Software Process
A software process (also knows as software methodology) is a set of related activities that
leads to the production of the software. These activities may involve the development of the
software from the scratch, or, modifying an existing system.
There are also supporting activities such as configuration and change management,
quality assurance, project management, user experience.
Along with other activities aim to improve the above activities by introducing new
techniques, tools, following the best practice, process standardization (so the diversity of
software processes is reduced), etc.
When we talk about a process, we usually talk about the activities in it. However, a process
also includes the process description, which includes:
1. Products: The outcomes of the an activity. For example, the outcome of architectural
design maybe a model for the software architecture.
2. Roles: The responsibilities of the people involved in the process. For example, the project
manager, programmer, etc.
3. Pre and post conditions: The conditions that must be true before and after an activity.
For example, the pre condition of the architectural design is the requirements have been
approved by the customer, while the post condition is the diagrams describing the
architectural have been reviewed.
Software process is complex, it relies on making decisions. There’s no ideal process and most
organizations have developed their own software process.
For example, an organization works on critical systems has a very structured process, while
with business systems, with rapidly changing requirements, a less formal, flexible process is
likely to be more effective.
Software Crisis:-
Software crisis is a term used in the early days of computing science for the difficulty
of writing useful and efficient computer programs in the required time. The software
crisis was due to the rapid increases in computer power and the complexity of the
problems that could not be tackled. With the increase in the complexity of the software,
many software problems arose because existing methods were insufficient.
The term "software crisis" was coined by some attendees at the first NATO Software
Engineering Conference in 1968 at Garmisch, Germany.[1][2] Edsger Dijkstra's
1972 ACM Turing Award Lecture makes reference to this same problem:[3]
The major cause of the software crisis is that the machines have become several orders
of magnitude more powerful! To put it quite bluntly: as long as there were no machines,
programming was no problem at all; when we had a few weak computers, programming
became a mild problem, and now we have gigantic computers, programming has
become an equally gigantic problem.
We’re going to take a quick glance about very general process models. These generic models
are abstractions of the process that can be used to explain different approaches to the
software development. They can be adapted and extended to create more specific processes.
Some methodologies are sometimes known as software development life cycle(SDLC)
methodologies, though this term could also be used more generally to refer to any
methodology.
Classical Waterfall Model
Classical waterfall model is the basic software development life cycle model. It is very simple but idealistic. Earlier this
model was very popular but nowadays it is not used. But it is very important because all the other software development life
cycle models are based on the classical waterfall model.
Classical waterfall model divides the life cycle into a set of phases. This model considers that one phase can be started after
completion of the previous phase. That is the output of one phase will be the input to the next phase. Thus the development
process can be considered as a sequential flow in the waterfall. Here the phases do not overlap with each other. The
different sequential phases of the classical waterfall model are shown in the below figure:
1. Feasibility Study: The main goal of this phase is to determine whether it would be
financially and technically feasible to develop the software.
The feasibility study involves understanding the problem and then determine the
various possible strategies to solve the problem. These different identified solutions
are analyzed based on their benefits and drawbacks, The best solution is chosen
and all the other phases are carried out as per this solution strategy.
2. Requirements analysis and specification: The aim of the requirement analysis
and specification phase is to understand the exact requirements of the customer
and document them properly. This phase consists of two different activities.
Requirement gathering and analysis: Firstly all the requirements regarding the
software are gathered from the customer and then the gathered requirements
are analyzed. The goal of the analysis part is to remove incompleteness (an
incomplete requirement is one in which some parts of the actual requirements
have been omitted) and inconsistencies (inconsistent requirement is one in
which some part of the requirement contradicts with some other part).
Requirement specification: These analyzed requirements are documented in a
software requirement specification (SRS) document. SRS document serves as a
contract between development team and customers. Any future dispute between
the customers and the developers can be settled by examining the SRS
document.
3. Design: The aim of the design phase is to transform the requirements specified in
the SRS document into a structure that is suitable for implementation in some
programming language.
4. Coding and Unit testing: In coding phase software design is translated into source
code using any suitable programming language. Thus each designed module is
coded. The aim of the unit testing phase is to check whether each module is working
properly or not.
5. Integration and System testing: Integration of different modules are undertaken
soon after they have been coded and unit tested. Integration of various modules is
carried out incrementally over a number of steps. During each integration step,
previously planned modules are added to the partially integrated system and the
resultant system is tested. Finally, after all the modules have been successfully
integrated and tested, the full working system is obtained and system testing is
carried out on this.
System testing consists three different kinds of testing activities as described below :
1.
α-testing: α-testing is the system testing performed by the development team.
β-testing: β-testing is the system testing performed by a friendly set of
customers.
Acceptance testing: After the software has been delivered, the customer
performed the acceptance testing to determine whether to accept the delivered
software or to reject it.
2. Maintainence: Maintenance is the most important phase of a software life cycle.
The effort spent on maintenance is the 60% of the total effort spent to develop a full
software. There are basically three types of maintenance :
Corrective Maintenance: This type of maintenance is carried out to correct
errors that were not discovered during the product development phase.
Perfective Maintenance: This type of maintenance is carried out to enhance
the functionalities of the system based on the customer’s request.
Adaptive Maintenance: Adaptive maintenance is usually required for porting
the software to work in a new environment such as work on a new computer
platform or with a new operating system.
Classical waterfall model suffers from various shortcomings, basically we can’t use it in
real projects, but we use other software development lifecycle models which are based
on the classical waterfall model. Below are some major drawbacks of this model:
No feedback path: In classical waterfall model evolution of a software from one
phase to another phase is like a waterfall. It assumes that no error is ever committed
by developers during any phases. Therefore, it does not incorporate any mechanism
for error correction.
Difficult to accommodate change requests: This model assumes that all the
customer requirements can be completely and correctly defined at the beginning of
the project, but actually customers’ requirements keep on changing with time. It is
difficult to accommodate any change requests after the requirements specification
phase is complete.
No overlapping of phases: This model recommends that new phase can start only
after the completion of the previous phase. But in real projects, this can’t be
maintained. To increase the efficiency and reduce the cost, phases may overlap.
Iterative Waterfall Model
In a practical software development project, the classical waterfall model is hard to use.
So, Iterative waterfall model can be thought of as incorporating the necessary changes
to the classical waterfall model to make it usable in practical software development
projects. It is almost same as the classical waterfall model except some changes are
made to increase the efficiency of the software development.
The iterative waterfall model provides feedback paths from every phase to its
preceding phases, which is the main difference from the classical waterfall
model.
Feedback paths introduced by the iterative waterfall model are shown in the figure
below.
When errors are detected at some later phase, these feedback paths allow correcting
errors committed by programmers during some phase. The feedback paths allow the
phase to be reworked in which errors are committed and these changes are reflected in
the later phases. But, there is no feedback path to the stage – feasibility study, because
once a project has been taken, does not give up the project easily.
It is good to detect errors in the same phase in which they are committed. It reduces the
effort and time required to correct the errors.
Phase Containment of Errors: The principle of detecting errors as close to their points
of commitment as possible is known as Phase containment of errors.
Advantages of Iterative Waterfall Model
Feedback Path: In the classical waterfall model, there are no feedback paths, so
there is no mechanism for error correction. But in iterative waterfall model feedback
path from one phase to its preceding phase allows correcting the errors that are
committed and these changes are reflected in the later phases.
Simple: Iterative waterfall model is very simple to understand and use. That’s why it
is one of the most widely used software development models.
Drawbacks of Iterative Waterfall Model
Difficult to incorporate change requests: The major drawback of the iterative
waterfall model is that all the requirements must be clearly stated before starting of
the development phase. Customer may change requirements after some time but
the iterative waterfall model does not leave any scope to incorporate change
requests that are made after development phase starts.
Incremental delivery not supported: In the iterative waterfall model, the full
software is completely developed and tested before delivery to the customer. There
is no scope for any intermediate delivery. So, customers have to wait long for getting
the software.
Overlapping of phases not supported: Iterative waterfall model assumes that one
phase can start after completion of the previous phase, But in real projects, phases
may overlap to reduce the effort and time needed to complete the project.
Risk handling not supported: Projects may suffer from various types of risks. But,
Iterative waterfall model has no mechanism for risk handling.
Limited customer interactions: Customer interaction occurs at the start of the
project at the time of requirement gathering and at project completion at the time of
software delivery. These fewer interactions with the customers may lead to many
problems as the finally developed software may differ from the customers’ actual
requirements.
Prototyping Model
Prototyping is defined as the process of developing a working replication of a product or
system that has to be engineered. It offers a small scale facsimile of the end product
and is used for obtaining customer feedback as described below:
The Prototyping Model is one of the most popularly used Software Development Life
Cycle Models (SDLC models).This model is used when the customers do not know the
exact project requirements beforehand. In this model, a prototype of the end product is
first developed, tested and refined as per customer feedback repeatedly till a final
acceptable prototype is achieved which forms the basis for developing the final product.
In this process model, the system is partially implemented before or during the analysis
phase thereby giving the customers an opportunity to see the product early in the life
cycle. The process starts by interviewing the customers and developing the incomplete
high-level paper model. This document is used to build the initial prototype supporting
only the basic functionality as desired by the customer. Once the customer figures out
the problems, the prototype is further refined to eliminate them. The process continues
till the user approves the prototype and finds the working model to be satisfactory.
There are 2 approaches for this model:
1. Rapid Throwaway Prototyping –
This technique offers a useful method of exploring ideas and getting customer
feedback for each of them. In this method, a developed prototype need not
necessarily be a part of the ultimately accepted prototype. Customer feedback helps
in preventing unnecessary design faults and hence, the final prototype developed is
of a better quality.
2. Evolutionary Prototyping –
In this method, the prototype developed initially is incrementally refined on the basis
of customer feedback till it finally gets accepted. In comparison to Rapid Throwaway
Prototyping, it offers a better approach which saves time as well as effort. This is
because developing a prototype from scratch for every iteration of the process can
sometimes be very frustrating for the developers.
Advantages –
The customers get to see the partial product early in the life cycle. This ensures a
greater level of customer satisfaction and comfort.
New requirements can be easily accommodated as there is scope for refinement.
Missing functionalities can be easily figured out.
Errors can be detected much earlier thereby saving a lot of effort and cost, besides
enhancing the quality of the software.
The developed prototype can be reused by the developer for more complicated
projects in the future.
Flexibility in design.
Disadvantages –
Costly w.r.t time as well as money.
There may be too much variation in requirements each time the prototype is
evaluated by the customer.
Poor Documentation due to continuously changing customer requirements.
It is very difficult for the developers to accommodate all the changes demanded by
the customer.
There is uncertainty in determining the number of iterations that would be required
before the prototype is finally accepted by the customer.
After seeing an early prototype, the customers sometimes demand the actual
product to be delivered soon.
Developers in a hurry to build prototypes may end up with sub-optimal solutions.
The customer might lose interest in the product if he/she is not satisfied with the
initial prototype.
Use –
The Prototyping Model should be used when the requirements of the product are not
clearly understood or are unstable. It can also be used if requirements are changing
quickly. This model can be successfully used for developing user interfaces, high
technology software-intensive systems, and systems with complex algorithms and
interfaces. It is also a very good choice to demonstrate the technical feasibility of the
product.
Spiral Model
Spiral model is one of the most important Software Development Life Cycle models,
which provides support for Risk Handling. In its diagrammatic representation, it looks
like a spiral with many loops. The exact number of loops of the spiral is unknown and
can vary from project to project. Each loop of the spiral is called a Phase of the
software development process. The exact number of phases needed to develop the
product can be varied by the project manager depending upon the project risks. As the
project manager dynamically determines the number of phases, so the project manager
has an important role to develop a product using spiral model.
The Radius of the spiral at any point represents the expenses(cost) of the project so far,
and the angular dimension represents the progress made so far in the current phase.
Below diagram shows the different phases of the Spiral Model:
Each phase of Spiral Model is divided into four quadrants as shown in the above figure.
The functions of these four quadrants are discussed below-
1. Objectives determination and identify alternative solutions: Requirements are
gathered from the customers and the objectives are identified, elaborated and
analyzed at the start of every phase. Then alternative solutions possible for the
phase are proposed in this quadrant.
2. Identify and resolve Risks: During the second quadrant all the possible solutions
are evaluated to select the best possible solution. Then the risks associated with
that solution is identified and the risks are resolved using the best possible strategy.
At the end of this quadrant, Prototype is built for the best possible solution.
3. Develop next version of the Product: During the third quadrant, the identified
features are developed and verified through testing. At the end of the third quadrant,
the next version of the software is available.
4. Review and plan for the next Phase: In the fourth quadrant, the Customers
evaluate the so far developed version of the software. In the end, planning for the
next phase is started.
Risk Handling in Spiral Model
A risk is any adverse situation that might affect the successful completion of a software
project. The most important feature of the spiral model is handling these unknown risks
after the project has started. Such risk resolutions are easier done by developing a
prototype. The spiral model supports coping up with risks by providing the scope to
build a prototype at every phase of the software development.
Prototyping Model also support risk handling, but the risks must be identified
completely before the start of the development work of the project. But in real life project
risk may occur after the development work starts, in that case, we cannot use
Prototyping Model. In each phase of the Spiral Model, the features of the product dated
and analyzed and the risks at that point of time are identified and are resolved through
prototyping. Thus, this model is much more flexible compared to other SDLC models.
The Spiral model is called as a Meta Model because it subsumes all the other SDLC
models. For example, a single loop spiral actually represents the Iterative Waterfall
Model. The spiral model incorporates the stepwise approach of the Classical Waterfall
Model. The spiral model uses the approach of Prototyping Model by building a
prototype at the start of each phase as a risk handling technique. Also, the spiral model
can be considered as supporting the evolutionary model – the iterations along the spiral
can be considered as evolutionary levels through which the complete system is built.
Advantages of Spiral Model: Below are some of the advantages of the Spiral Model.
Risk Handling: The projects with many unknown risks that occur as the
development proceeds, in that case, Spiral Model is the best development model to
follow due to the risk analysis and risk handling at every phase.
Good for large projects: It is recommended to use the Spiral Model in large and
complex projects.
Flexibility in Requirements: Change requests in the Requirements at later phase
can be incorporated accurately by using this model.
Customer Satisfaction: Customer can see the development of the product at the
early phase of the software development and thus, they habituated with the system
by using it before completion of the total product.
Disdvantages of Spiral Model: Below are some of the main disadvantages of the
spiral model.
Complex: The Spiral Model is much more complex than other SDLC models.
Expensive: Spiral Model is not suitable for small projects as it is expensive.
Too much dependable on Risk Analysis: The successful completion of the project
is very much dependent on Risk Analysis. Without very highly experienced
expertise, it is going to be a failure to develop a project using this model.
Difficulty in time management: As the number of phases is unknown at the start of
the project, so time estimation is very difficult.
Incremental process model
Incremental process model is also know as Successive version model.
First, a simple working system implementing only a few basic features is built and then
that is delivered to the customer. Then thereafter many successive iterations/ versions
are implemented and delivered to the customer until the desired system is realized.
The use of powerful developer tools such as JAVA, C++, Visual BASIC, XML, etc. is
also an integral part of the projects.
Iterative Waterfall Model: The Iterative Waterfall model is probably the most used
software development model. This model is simple to use and understand. But this
model is suitable only for well-understood problems and is not suitable for the
development of very large projects and projects that suffer from a large number of risks.
Prototyping Model: The Prototyping model is suitable for projects, which either the
customer requirements or the technical solutions are not well understood. This risks
must be identified before the project starts. This model is especially popular for the
development of the user interface part of the project.
Evolutionary Model: The Evolutionary model is suitable for large projects which can be
decomposed into a set of modules for incremental development and delivery. This
model is widely used in object-oriented development projects. This model is only used if
incremental delivery of the system is acceptable to the customer.
Spiral Model: The Spiral model is considered as a meta-model as it includes all other
life cycle models. Flexibility and risk handling are the main characteristics of this model.
The spiral model is suitable for the development of technically challenging and large
software that is prone to various risks that are difficult to anticipate at the start of the
project. But this model is very much complex than the other models.
Agile Model: The Agile model was designed to incorporate change requests quickly. In
this model, requirements are decomposed into small parts that can be incrementally
developed. But the main principle of the Agile model is to deliver an increment to the
customer after each Time-box. The end date of an iteration is fixed, it can’t be extended.
This agility is achieved by removing unnecessary activities that waste time and effort.
Selection of appropriate life cycle model for a project: Selection of proper lifecycle
model to complete a project is the most important task. It can be selected by keeping
the advantages and disadvantages of various models in mind. The different issues that
are analyzed before selecting a suitable life cycle model are given below :
Characteristics of the software to be developed: The choice of the life cycle
model largely depends on the type of the software that is being developed. For small
services projects, the agile model is favored. On the other hand, for product and
embedded development, the Iterative Waterfall model can be preferred. The
evolutionary model is suitable to develop an object-oriented project. User interface
part of the project is mainly developed through prototyping model.
Characteristics of the development team: Team member’s skill level is an
important factor to deciding the life cycle model to use. If the development team is
experienced in developing similar software, then even an embedded software can
be developed using the Iterative Waterfall model. If the development team is entirely
novice, then even a simple data processing application may require a prototyping
model.
Risk associated with the project: If the risks are few and can be anticipated at the
start of the project, then prototyping model is useful. If the risks are difficult to
determine at the beginning of the project but are likely to increase as the
development proceeds, then the spiral model is the best model to use.
Characteristics of the customer: If the customer is not quite familiar with
computers, then the requirements are likely to change frequently as it would be
difficult to form complete, consistent and unambiguous requirements. Thus, a
prototyping model may be necessary to reduce later change requests from the
customers. Initially, the customer’s confidence is high on the development team.
During the lengthy development process, customer confidence normally drops off as
no working software is yet visible. So, the evolutionary model is useful as the
customer can experience a partially working software much earlier than whole
complete software. Another advantage of the evolutionary model is that it reduces
the customer’s trauma of getting used to an entirely new system .