Professional Documents
Culture Documents
E -NOTES
IV SEM – BCA
Introduction
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 documentation. Software, when made for a
specific requirement is called a software product.
Engineering, on the other hand, is all about developing products, using well-defined,
scientific principles and methods.
What is Software?
So, we can define software engineering as an engineering branch associated with the
development of software products using well-defined scientific principles, methods, and
In other words, software engineering is an engineering discipline that is concerned with all
aspects of software production.
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 construct a wall than a house or a building, likewise, the scale of the
software is so large that engineering has to step in to give it a scientific process.
Scalability
If the software processes are not past one of the technical and engineering
concepts, it would be necessary to re-create new software to scale the existing one.
Cost
As hardware industry has shown its skills and huge manufacturing has lowered
the price of computer and electronic hardware. But the cost of the software remains
high if the proper process is not adopted.
Dynamic Change
Quality Management
Software should be written in such a way so that it can evolve to meet the changing
needs of customers. This is a critical attribute because software change is an
inevitable requirement of a changing business environment.
Efficiency
Software should not make wasteful use of system resources such as memory and
processor cycles. Efficiency therefore includes responsiveness, processing time,
memory utilization, etc.
Acceptability
Software must be acceptable to the type of users for which it is designed. This means
that it must be understandable, usable, and compatible with other systems that they
use.
Software Evolution
This includes the initial development of software and its maintenance and updates, till
desired software product is developed, which satisfies the expected requirements.
Evolution starts from the requirement gathering process. After which developers
create a prototype of the intended software and show it to the users to get their
feedback at the early stage of the software product development.
The users suggest changes, on which several consecutive updates and maintenance
keep on changing too. This process changes to the original software, till the desired
software is accomplished.
Even after the user has the desired software in hand, the advancing technology and
the changing requirements force the software product to change accordingly.
The only feasible and economical solution is to update the existing software so that it
matches the latest requirements.
Software products
Software engineers are concerned with developing software products (i.e., software
which can be sold to a customer). There are two kinds of software products:
1. Generic Products
2. Customized (or bespoke) Products
Generic Products
These are stand-alone systems that are produced by a development organization and
sold on the open market to any customer who is able to buy them.
Examples of this type of product include software for PCs such as databases, word
processors, drawing packages, and project-management tools.
Examples of this type of software include control systems for electronic devices,
systems written to support a particular business process, and air traffic control
systems.
For custom products, the specification is usually developed and controlled by the
organization that is buying the software. The software developers must work to that
specification.
Software takes dual role. It is both a product and a vehicle for delivering a product.
Characteristics of 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
ever-changing environment:
Modularity
Maintainability
Flexibility
Scalability
Applications of Software
System software
System software is a collection of programs written to service other programs. The systems
software is characterized by
heavy interaction with computer hardware
heavy usage by multiple users
Application software
Application software consists of standalone programs that solve a specific business need.
It facilitates business operations or management/technical decision making.
It is used to control business functions in real-time
E.g. point-of-sale transaction processing, real-time manufacturing process control.
Engineering/Scientific software
Embedded software
Embedded software resides within a product or system and is used to implement and
control features and functions for the end-user and for the system itself.
It can perform limited and esoteric functions or provide significant function and
control capability.
Product-line software
Web/Mobile applications
Makes use of non-numerical algorithms to solve complex problems that are not
amenable to computation or straightforward analysis.
Applications within this area include robotics, expert systems, pattern recognition
(image and voice), artificial neural networks, theorem proving, and game playing.
Legacy Software
Legacy software are older programs that are developed decades ago. The quality of legacy
software is poor because it has inextensible design, convoluted code, poor and non-existent
documentation, test cases and results that are not achieved.
The software must be adapted to meet the needs of new computing environment or
technology.
The software must be enhanced to implement new business requirements.
The software must be extended to make it interoperable with more modern systems or
database.
The software must be rearchitected to make it viable within a network environment.
A professionally developed software system is often more than a single program. The
system usually consists of a number of separate programs and configuration files that
are used to set up these programs. It may include system documentation, which
describes the structure of the system; user documentation, which explains how to use
the system, and websites for users to download recent product information.
This is one of the important differences between professional and amateur software
development. If you are writing a program for yourself, no one else will use it and
you don’t have to worry about writing program guides, documenting the program
design, etc.
However, if you are writing software that other people will use and other engineers
will change then you usually have to provide additional information as well as the
code of the program.
Management myth
Customer myth
Practitioner’s myth
Management Myths
A software manager often grasps at belief in a software myth, if that belief will lessen the
pressure (even temporarily).
Myth: The available standards and procedures for software are enough.
Reality: The book of standards may very well exist, but is it used? Are software practitioners
aware of its existence? Does it reflect modern software engineering practice? Is it complete?
Is it adaptable? Is it streamlined to improve time-to-delivery while still maintaining a focus
on quality? In many cases, the answer to all of these questions is no.
Myth: Adding more programmers when the work is behind schedule can catch up.
Reality: However, as new people are added, people who were working must spend time
educating the newcomers, thereby reducing the amount of time spent on productive
development effort. People can be added but only in a planned and well-coordinated manner.
Myth: Outsourcing the software project to third party, we can relax and let that party build it.
Reality: If an organization does not understand how to manage and control software projects
internally, it will invariably struggle when it outsources software projects.
Customer Myths
In many cases, the customer believes myths about software because software managers and
practitioners do little to correct misinformation. Myths lead to false expectations (by the
customer) and, ultimately, dissatisfaction with the developer.
Myth: General statement of objective is enough to begin writing programs, the details can be
filled in later.
Reality: Although a comprehensive and stable statement of requirements is not always
possible, an ambiguous “statement of objectives” is a recipe for disaster. Unambiguous
requirements (usually derived iteratively) are developed only through effective and
continuous communication between customer and developer.
Practitioner’s Myths
Myths that are still believed by software practitioners have been fostered by over 60 years of
programming culture.
Myth: Once the program is written, the job has been done.
Reality: Someone once said that “the sooner you begin ‘writing code,’ the longer it’ll take
you to get done.” Industry data indicate that between 60 and 80 percent of all effort expended
on software will be expended after it is delivered to the customer for the first time.
Myth: Until the program is running, there is no way of assessing the quality.
Reality: One of the most effective software quality assurance mechanisms can be applied
from the inception of a project— the technical review. Software reviews are a “quality
filter” that have been found to be more effective than testing for finding certain classes of
software defects.
Software Ethics
Software engineering is carried out within a social and legal framework that limits the
freedom of people working in that area.
As a software engineer, you must accept that your job involves wider responsibilities
than simply the application of technical skills. You must also behave in an ethical and
morally responsible way if you are to be respected as a professional engineer.
However, there are areas where standards of acceptable behavior are not bound by
laws but by the more tenuous notion of professional responsibility. Some of these are:
Confidentiality
You should normally respect the confidentiality of your employers or clients irrespective of
whether or not a formal confidentiality agreement has been signed.
Competence
You should not misrepresent your level of competence. You should not knowingly accept
work that is outside your competence.
Intellectual property rights
You should be aware of local laws governing the use of intellectual property such as patents
and copyright. You should be careful to ensure that the intellectual property of employers
and clients is protected.
Computer misuse
You should not use your technical skills to misuse other people’s computers. Computer
misuse ranges from relatively trivial (game playing on an employer’s machine, say) to
extremely serious (dissemination of viruses or other malware).
Software Process
A software process is a set of related activities that leads to the production of a software
product. These activities may involve the development of software from scratch in a
standard programming language like Java or C.
There are many different software processes but all must include four activities that are
fundamental to software engineering:
1. Software specification - The functionality of the software and constraints on its operation
must be defined.
2. Software design and implementation - The software to meet the specification must be
produced.
3. Software validation - The software must be validated to ensure that it does what the
customer wants.
4. Software evolution - The software must evolve to meet changing customer needs.
All process models can accommodate the generic framework activities, but each applies a
different emphasis to these activities and defines a process flow that invokes each framework
activity in a different manner.
The waterfall model, sometimes called the classic life cycle, suggests a systematic,
sequential approach to software development that begins with customer specification of
requirements and progresses through planning, modelling, construction, and deployment,
culminating in ongoing support of the completed software.
The classical waterfall model is intuitively the most obvious way to develop software.
Though the classical waterfall model is elegant and intuitively obvious, it is not a practical
model in the sense that it cannot be used in actual software development projects. Thus,
this model can be considered to be a theoretical way of developing software. But all other
life cycle models are essentially derived from the classical waterfall model. So, in order to be
able to appreciate other life cycle models it is necessary to learn the classical waterfall
model.
Advantages
This model is easy to understand and easy to use.
In this model, the procedure and the results are well documented.
It is suitable for smaller projects where requirements are precisely defined and very
well understood.
Disadvantages
It is extremely difficult to proceed back and correct something.
Not an efficient model for object oriented and complex projects.
It does not provide requirement changes and requirement review.
High amounts of uncertainty and risk.
It is a time-consuming process.
Prototype 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. Often, major design decisions depend on issues
like the response time of a hardware controller, or the efficiency of a sorting algorithm, etc.
In such circumstances, a prototype may be the best or the only way to resolve the technical
issues.
Advantages:
This model is flexible in design.
It is easy to detect errors.
We can find missing functionality easily.
It can be reused by the developer for more complicated projects in future.
It ensures a greater level of customer satisfaction and comfort.
Disadvantages:
This model is costly.
It has poor documentation because of continuously changing customer requirements.
Customers may not be satisfied or interested in the product after seeing the initial
prototype.
Spiral Model
The Spiral model of software development is shown in below figure. 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 figure. The
following activities are carried out during each phase of a spiral model.
Spiral Model
• During the first quadrant, it is needed to identify the objectives of the phase.
• Examine the risks associated with these objectives.
• Steps are taken to reduce the risks. For example, if there is a risk that the requirements are
inappropriate, a prototype system may be developed.
• Develop and validate the next level of the product after resolving the identified risks.
• Review the results achieved so far with the customer and plan the next iteration around the
spiral.
• Progressively more complete version of the software gets built with each iteration around
the spiral.
The spiral model is called a Meta model since it encompasses all other life cycle models.
Risk handling is inherently built into this model. The spiral model is suitable for
development of technically challenging software products that are prone to several kinds of
risks.
Advantages
1. Risk handling is one of important advantages of the Spiral model, it is best development
model to follow due to the risk analysis and risk handling at every phase .
Disadvantages
Incremental Model
The incremental process model is also known as the 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 released.
Requirements of Software are first broken down into several modules that can be
incrementally constructed and delivered. At any time, the plan is made just for the next
increment and not for any kind of long-term plan. Therefore, it is easier to modify the version
as per the need of the customer.
Incremental Model
Advantages
Disadvantages
The meaning of Agile is swift or versatile. "Agile process model" refers to a software
development approach based on iterative development. Agile methods break tasks into
smaller iterations, or parts do not directly involve long term planning. The project scope and
requirements are laid down at the beginning of the development process. Plans regarding the
number of iterations, the duration and the scope of each iteration are clearly defined in
advance.
1. Requirements gathering: In this phase, you must define the requirements. You should
explain business opportunities and plan the time and effort needed to build the project. Based
on this information, you can evaluate technical and economic feasibility.
2. Design the requirements: When you have identified the project, work with stakeholders
to define requirements. You can use the user flow diagram or the high-level UML diagram to
show the work of new features and show how it will apply to your existing system.
3. Construction/ iteration: When the team defines the requirements, the work begins.
Designers and developers start working on their project, which aims to deploy a working
product. The product will undergo various stages of improvement, so it includes simple,
minimal functionality.
4. Testing: In this phase, the Quality Assurance team examines the product's performance
and looks for the bug.
5. Deployment: In this phase, the team issues a product for the user's work environment.
6. Feedback: After releasing the product, the last step is feedback. In this, the team receives
feedback about the product and works through the feedback.
Advantages
1. Frequent Delivery
Disadvantages
1. Due to the shortage of formal documents, it creates confusion and crucial decisions taken
throughout various phases can be misinterpreted at any time by different team members.
2. Due to the lack of proper documentation, once the project completes and the developers
allotted to another project, maintenance of the finished project can become a difficulty.
Agile Methods
All Agile methodologies mentioned below share the same core values and principles, but
they may differ in their implementation and specific practices. Agile development requires a
high degree of collaboration and communication among team members, as well as a
willingness to adapt to changing requirements and feedback from customers.
Agile methods are incremental development methods that focus on rapid development,
frequent releases of the software, reducing process overheads, and producing high-quality
code. They involve the customer directly in the development process.
Scrum
Scrum is aimed at sustaining strong collaboration between people working on complex
products, and details are being changed or added. It is based upon the systematic interactions
between the three major roles:
Scrum Master
Product Owner
The Team.
Scrum Master is a facilitator who arranges daily meetings, tracks the backlog of work to
be done, records decisions, measures progress against the backlog, and communicates with
customers and management outside of the team.
The whole team attends the daily meetings, which are sometimes ‘stand-up’ meetings to
keep them short and focused. During the meeting, all team members share information,
describe their progress since the last meeting, problems that have arisen, and what is planned
for the following day. This means that everyone on the team knows what is going on and, if
problems arise, can replan short-term work to cope with them. Everyone participates in this
short-term planning—there is no top down direction from the Scrum master.
Product Owner, usually a customer or other stakeholder, is actively involved throughout the
project, conveying the global vision of the product and providing timely feedback on the job
done after every sprint.
The Team is a cross-functional and self-organizing group of people that is responsible for
the product implementation. It should consist of up to 7 team members, in order to stay
flexible and productive.
To decide on the balance between a plan-based and an agile approach, we have to answer a
range of technical, human, and organizational questions:
2. Is an incremental delivery strategy, where you deliver the software to customers and get
rapid feedback from them, realistic? If so, consider using agile methods.
3. How large is the system that is being developed? Agile methods are most effective when
the system can be developed with a small co-located team who can communicate informally.
This may not be possible for large systems that require larger development teams so a plan-
driven approach may have to be used.
In reality, the issue of whether a project can be labelled as plan-driven or agile is not
very important. Ultimately, the primary concern of buyers of a software system is whether
or not they have an executable software system that meets their needs and does useful things
for the individual user or the organization.
What is 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.
Thus, no matter which life cycle model is followed, the basic activities are included in all life
cycle models though the activities may be carried out in different orders in different life
cycle models.
During any life cycle phase, more than one activity may also be carried out. For example, the
design phase might consist of the structured analysis activity followed by the structured
design activity.
SDLC divides the life cycle into the following phases as shown in figure:
Feasibility Study
Feasibility Study
The main aim of feasibility study is to determine whether it would be financially and
technically feasible to develop the product.
At first project managers or team leaders try to have a rough understanding of what is
required to be done by visiting the client side. They study different input data to the system
and output data to be produced by the system. They study what kind of processing is needed
to be done on these data and they look at the various constraints on the behavior of the
system.
After they have an overall understanding of the problem they investigate the different
solutions that are possible. Then they examine each of the solutions in terms of what kind of
resources required, what would be the cost of development and what would be the
development time for each solution.
The aim of the requirements analysis and specification phase is to understand the exact
requirements of the customer and to document them properly. This phase consists of two
distinct activities, namely
The goal of the requirements gathering activity is to collect all relevant information from
the customer regarding the product to be developed. This is done to clearly understand the
customer requirements so that incompleteness and inconsistencies are removed.
The requirements analysis activity is begun by collecting all relevant data regarding the
product to be developed from the users of the product and from the customer through
interviews and discussions. For example, to perform the requirements analysis of a business
accounting software required by an organization, the analyst might interview all the
accountants of the organization to ascertain their requirements.
During this activity, the user requirements are systematically organized into a Software
Requirements Specification (SRS) document.
Design
The goal 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. In technical terms, during the design phase the software architecture is derived
from the SRS document.
The purpose of the coding and unit testing phase (sometimes called the implementation
phase) of software development is to translate the software design into source code. Each
component of the design is implemented as a program module.
The end-product of this phase is a set of program modules that have been individually tested.
During this phase, each module is unit tested to determine the correct working of all the
individual modules.
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 a planned
manner.
Integration is normally carried out incrementally over a number of steps. During each
integration step, the partially integrated system is tested and a set of previously planned
modules are added to it. Finally, when all the modules have been successfully integrated and
tested, system testing is carried out.
The goal of system testing is to ensure that the developed system conforms to its
requirements laid out in the SRS document.
Acceptance testing: It is the system testing performed by the customer himself after the
product delivery to determine whether to accept or reject the delivered product.
Maintenance
Maintenance of a typical software product requires much more than the effort necessary to
develop the product itself. Maintenance involves performing any one or more of the
following three kinds of activities:
Correcting errors that were not discovered during the product development phase.
This is called corrective maintenance.
Improving the implementation of the system, and enhancing the functionalities of the
system according to the customer’s requirements. This is called perfective
maintenance.
Porting the software to work in a new environment. For example, porting may be
required to get the software to work on a new computer platform or with a new
operating system. This is called adaptive maintenance.
Question Bank
Two Marks
1. What is Software?
2. Define Software Engineering.
3. What are the attributes of good software?
4. What is SDLC?
5. What is Software process?
6. Mention the types of Software process models.
7. List down the characteristics of software.
8. What do you mean by evolving role of software?
9. What is the need of software engineering?
10. List the applications of software or categories of software.
11. What is legacy software?
12. What is software product? Mention the types of software products.
13. Write the importance of software professional development.
14. Draw a diagram for software engineering layers.
15. Write shortly on software engineering ethics.
16. Write about waterfall model?
17. Mention the advantages of waterfall model.
18. What are the disadvantages of waterfall model?
19. What is prototyping model?
20. What are the advantages of prototyping model?
21. What are the disadvantages of prototyping model?
22. Write about spiral model?
23. Mention the situation to use spiral model?
24. Write the advantages and disadvantages of spiral model?
25. What is incremental model?
26. Write the advantages and disadvantages of incremental model?
Five Marks
1. Discuss the characteristics of good software.
2. Write short notes on software myth.
3. Discuss on software engineering ethics.
4. Explain the software engineering layered technology.
5. Explain the software applications or broad categories of software.
6. Discuss on software evolution.
7. Explain waterfall model with neat diagram.
8. Explain the prototyping model with neat diagram.
9. Explain the spiral model with neat diagram.