SOFTWARE ENGINEERING
INTRODUCTION:
SOFTWARE: A program is a set of instructions that performs a specific task. Software is a
set of programs that accomplish a collective functionality.
SOFTWARE ENGINEERING:
Software engineering is a Engineering discipline that is concerned with all the aspects of
software production from the early stage of development to maintaining the system after it has
gone to use.
It is a discipline whose aim is the production of high quality software, software delivered on
time within budget and satisfies its requirement.
WHAT SOFTWARE SYSTEM CONSISTS OF?
Software system consists of set of programs, configuration files, system documentation and
user documentation.
Configuration files: used to set these programs.
System documentation: describes the structure of the system.
User documentation: Explain how to use the system and website for users.
SOFTWARE PRODUCTS:
Software engineers develop software products that are to be sold to the customers:
Software products can be categorized into:
1. Generic products: These are stand-alone systems that are marketed and sold
to any customer who wishes to buy them.
Examples – PC software such as graphics programs, project management tools; CAD software;
software for specific markets such as appointments systems for dentists.
DAVAN NUTAN COLLEGE
2. Customized products: Software that is commissioned by a specific customer
to meet their own needs. Such products are generally used to solve a problem in a
specific domain.
The attributes of good software are:
Maintainability –Every software developed should be able to meet the changing needs
of customers.
Dependability and security- Software developed for any situation should not cause
physical or economic damage in the event of system failure. Care should be taken that
malicious users should not be able to access or damage the system.
Efficiency – Depending on the context, the developed software would be evaluated based
on its responsiveness, processing time and memory utilization
Acceptability- Any software developed should be understandable, usable and compatible
with other systems in the context that work in unison with it.
Software crisis:
It is obvious to note that it is very difficult to write efficient software within the right time
specified. This could be due to various reasons such as
1. Heterogeneity –increasingly, systems are required to operate as
distributed systems across networks that include different types of computer and
mobile devices.
2. Business and social change: Business and society are changing
incredibly quickly as emerging economies develop and new technologies become
available. They need to be able to change their existing software and to rapidly
develop new software.
Security and trust also plays a very important role in developing a software module. As
software is intertwined with all aspects of our lives, it is essential that we can trust that
DAVAN NUTAN COLLEGE
software. Hence appropriate security measures need to be taken to safeguard the software
from external attack.
Software Engineering Ethics
Software development does not just involve technical skills, but also includes ethics. The
team involved in the software development is expected to be honest and ethically
responsible for the software at all times. The following factors need to be addressed
during, before and after software development.
a) Confidentiality: It is the employers‟ responsibility to maintain
confidentiality of the employee information and it is the employee responsibility
to maintain the secrecy and confidentiality involved in the development of
software.
b) Competence: It is the ethical responsibility of an employee to accept
work that matches his technical skills. He should be competent enough
to carry out the task assigned to him.
c) IPR (Intellectual Property Rights) – Very tricky, but very essential. It
has to be taken care that when reusing existing components for software
development, the components is available for use as per IPR.
d) Computer misuse- Using the computer provided by the employer for
personal use is misconduct and misuse of the system. Watching videos, playing
songs, browsing social networking sites all mark the misuse of computer.
SOFTWARE PROCESS:
A set of activities who goal is the development of software.
Software process activities
Any software developed generally follows the following software process activities:
DAVAN NUTAN COLLEGE
1. Software specification – Involves gathering requirements for the
development of software
2. Software development- involves the implementation of the software.
3. Software validation – verifying if the software developed meets its
requirements.
4. Software evolution- making sure that the software can be modified with
respect to change in requirements over time.
SOFTWARE PROCESS MODELS:
A simplified representation of a software process presented from a specified perspective.
It is an abstract representation of software process.
THE PROCESS MODELS ARE:
1. Waterfall model.
2. Evolutionary development model.
3. Component based software engineering.
DAVAN NUTAN COLLEGE
[Link] MODEL:
This is a plan-driven model. There are separate and distinct phases of specification
and development.
The phases of Waterfall model depicted in Fig 8 are:
a) Requirements analysis and definition – Gathering the requirements and
defining the functionality of each requirement. This could be done through
various techniques discussed in the next section.
b) System and software design- Design and architecting the software as a
whole. The components involved, the interface between them and other design
considerations are depicted as diagrams. UML diagrams are most frequently used
design representations.
c) Implementation and unit testing – Developing the system and testing
each module one by one as a single unit. Every component developed or reused
are individually tested.
d) Integration and system testing- The components are integrated together
and the system is tested as a whole. The interfaces and communication modules
between the systems are tested here.
e) Operation and maintenance- Once the system is put into use, the
functionality of the system in the operational domain needs to be taken care of.
The maintenance and operation of the system at the client end is important.
DAVAN NUTAN COLLEGE
Advantages of Waterfall Model:
➢ simple to implement.
➢ start and end point of each phase is fixed,which makes it easy to cover
progress.
➢ release data,final cost can be determined before development.
➢ easy to control and clarity to customer due to strict reporting system.
Disadvantages of Waterfall Model:
➢ high risk factor→not suitable for most significant and complex projects.
➢ cannot accept the changes in requirements during development.
➢ it becomes tough to go back to the phase.
[Link] development model:
Evolutionary development is based on the idea of developing an initial implementation, exposing
this to user comment and refining it through many versions until an adequate system has been
developed.
Specification, development and validation activities are interleaved rather than separate, with
rapid feedback across activities. There are two fundamental types of evolutionary development:
1. Exploratory development where the objective of the process is to work with the customer to
explore their requirements and deliver a final system. The development starts with the parts of
the system that are understood. The system evolves by adding new features proposed by the
customer.
2. Throwaway prototyping where the objective of the evolutionary development process is to
understand the customer’s requirements and hence develop a better requirements definition for
the system. The prototype concentrates on experimenting with the customer requirements that
are poorly understood. An evolutionary approach to software development is often more
effective than the waterfall approach in producing systems that meet the immediate needs of
customers.
DAVAN NUTAN COLLEGE
The advantage of a software process that is based on an evolutionary approach Concurrent
activities Validation Final version Development Intermediate versions Specification Initial
version Outline description Evolutionary development 4.1
■ Software process models is that the specification can be developed incrementally.
As users develop a better understanding of their problem, this can be reflected in the software
system. However, from an engineering and management perspective, the evolutionary
approach has two problems:
1. The process is not visible Managers need regular deliverables to measure progress. If systems
are developed quickly, it is not cost-effective to produce documents that reflect every version
of the system.
2. Systems are often poorly structured Continual change tends to corrupt the software structure.
Incorporating software changes becomes increasingly difficult and costly.
Fig: EVOLUTIONARY DEVOLPMENT
DAVAN NUTAN COLLEGE
Advantages of evolutionary development model:
➢ Software process that is based on an evolutionary approach is that
specification can be developed incrementally.
➢ As users develop a better understanding of their problem,this can be
reflected in the software system.
Disadvantages of evolutionary development model:
➢ The process is not [Link] needs regular deliverables to measure
[Link] systems are developed quickly,it is not cost-effective to produce
document that reflect every system.
➢ Software are often poorly structured,continual changes tends to corrupt the
software structure .Incorporating software changes becomes increasingly
difficult and costly.
DAVAN NUTAN COLLEGE
[Link] BASED SOFTWARE MODEL:
This reuse-oriented approach relies on a large base of reusable software components and some
integrating framework for these components. Sometimes, these components are systems in
their own right (COTS or commercial off-the-shelf systems) that may provide specific
functionality such as text formatting or numeric calculation.
The generic process model for CBSE is shown in Figure 4.3.
While the initial requirements specification stage and the validation stage are comparable with
other processes, the intermediate stages in a reuse-oriented process are different. These stages
are:
1. Component analysis Given the requirements specification; a search is made for
components to implement that specification. Usually, there is no exact match, and the
components that may be used only provide some of the functionality required.
2. Requirements modification During this stage, the requirements are analyzed using
information about the components that have been discovered. They are then modified to reflect
the available components. Where modifications are impossible, the component analysis activity
may be re-entered to search for alternative solutions.
DAVAN NUTAN COLLEGE
3. System design with reuse During this phase, the framework of the system is designed
or an existing framework is reused. The designers take into account the components that are
reused and organize the framework to cater to this. Some new software may have to be designed
if reusable components are not available.
4. Development and integration Software that cannot be externally procured is developed,
and the components and COTS systems are integrated to create the new system. System
integration, in this model, may be part of the development process rather than a separate
activity.
Component-based software engineering has the obvious advantage of reducing the amount of
software to be developed and so reducing cost and risks. It usually also leads to faster delivery
of the software. However, requirements compromises are inevitable and this may lead to a
system that does not meet the real needs of users. Furthermore, some control over the system
evolution is lost as new versions of the reusable components are not under the control of the
organization using them.
PROCESS ACTIVITIES:
Software processes are a integral part of software process models. Various process activities
that are carried out during every phase of development form the software activities. To define
technically, A software process is a structured set of activities required to develop a software
system. The activities by and large include:
1. Specification – defining what the system should do;
2. Design and implementation – defining the organization of the system
and implementing the system;
DAVAN NUTAN COLLEGE
3. Validation – checking that it does what the customer wants;
4. Evolution – changing the system in response to changing customer
needs.
Requirements engineering process consists of the following activities:
a) Feasibility study – Technical and Financial feasibility of the project
needs to be considered.
b) Requirements elicitation and analysis – Expectation from the system.
The functionalities that the system is expected to provide.
c) Requirements specification – Defining requirements for every activity
performed by the user or set of users and the expected outcome for each
of these activities.
d) Requirements validation – Checking validity of the requirements.
Verifying if the requirements specification contains the functionalities
that the system is expected to perform.
DAVAN NUTAN COLLEGE
Once the feasibility study has been completed a feasibility report is generated. It is observed
that the requirements elicitation and analysis, requirements specification and requirements
validation are iterative activities. Based on the analysis it is required to decide on a system
model that needs to be incorporated as a part of requirements document. The requirements
specification activity gives the complete user and system requirements. The requirements
validation process checks if the system performs the required functions and the requirement
specification covers all functionalities to be provided by the system. The outcome of each
activity is an input to the requirements document.
Software design and implementation
Once the requirements for specific software have been gathered the next activity is to design
and develop the software. These activities could be performed individually or in parallel
depending on the project. Each of these activities have a set of process activities to be carried
out. They are described in detail below:
Software design
DAVAN NUTAN COLLEGE
The major aim of this phase of software development is to design a software structure that
realizes the specification as given by the requirements specification document.
Design activities involve Architectural design, interface design and component design. The
system architecture and its components need to be defined and specified as a part of
architectural design. The interface design involves the specification and working of interfaces
for enables inter and intra component communication.
Implementation
Translate this structure into an executable program. This requires the use of a programming
language. The choice of programming language is based on the complexity of the software, the
requirements specification of the software, the reusability of components in the software etc.
Software validation
Validating the software involve checking for conformation of the system to its specification.
This also involves checking and review processes and system testing. System testing involves
executing the system with test cases. The system testing involves Component testing and
DAVAN NUTAN COLLEGE
acceptance testing. Component testing involves testing of each component that is used to build
the software. The interfaces between the components and the working of components with the
existing system code needs to be tested. The process activities involved in testing and its
iterations are shown in Fig 5. Every individual component is tested and then system is tested
as a whole. Acceptance testing is done to determine if the system is functioning well in the
domain of its application.
The various phases of testing are depicted below in Fig 6. It is a wrong notion that testing only
begins after implementation is complete. As a fact, testing is carried out throughout the
development process. The figure below depicts the outcome of each activity in the phase of
testing.
Testing phases
DAVAN NUTAN COLLEGE
Fig 6: Phases of testing
As and when the requirements specification is complete the acceptance test plan is also parallel
written because the acceptance testing involves testing of the software in its working domain.
Acceptance test cases are written at this stage. The test plan gets its input from both
requirements specification as well as system specification activities. The system integration
test plan is an output of system specification and design. Workings of individual components,
testing for interfaces between them are all a part of system integration testing. Once the detailed
design is available the sub system integration test plan is also drafted. Later on the tests are
accomplished by making use of the test plan.
This is also called as V-model for test plan driven software development process.
Software Evolution
DAVAN NUTAN COLLEGE
Fig 7: Activities in software evolution
It is obvious that software is inherently flexible and can change. As requirements change
through changing business circumstances, the software that supports the business must also
evolve and change. Although there has been a demarcation between development and evolution
(maintenance) this is increasingly irrelevant as fewer and fewer systems are completely new.
Fig 7 depicts the activities involved in software evolution. Existing system is continuously
assessed based on the system requirements. If any change has been proposed the system needs
to be modified and a new system is then released. This is an iterative process and continues
until the required outcome has been obtained.
COPING WITH CHANGES:
Prototyping:
DAVAN NUTAN COLLEGE
The objective of prototype should be made explicit from the start of the process. If the
objectives are left unstated management are end user may misunderstood the function of the
prototype.
The next stage is to what to put into and more important is what to be leave out of the prototype
system.
The objective of the prototype is to concentrate on some important functionalities and to decide
to relax on non-functional requirements.
The final stage of the process is prototype evolution provisions must be made during this stage
for user training and prototype objectives should be used to derive a plan for evolution.
Advantages:
➢ This model is good where requirements are changing.
➢ Customers are actively involved in development prototype can be changed and even
discarded.
➢ Flexibility in design, so that we can easily detect errors.
Disadvantages:
➢ Client involvement is more.
➢ Too many changes can disturb the development team.
➢ It is expensive and time consuming.
INCREEMENTAL DELIVERY:
Incremental development involves developing the system in increments and
evaluating each increment before proceeding to the development of the next
increment. This is the normal approach used in agile methods. The evaluation of
software developed using incremental approach is done by user/customer proxy.
Incremental delivery involves deploying an increment for use by end-users. This
is a more realistic evaluation about practical use of software. It is difficult to
DAVAN NUTAN COLLEGE
implement for replacement systems as increments have less functionality than the
system being replaced.
Advantages and disadvantages
➢ Cost of accommodating changing customer requirements is reduced.
Customer feedback on the development is obtained as and when an
increment is ready to be released. Rapid delivery and deployment of useful
software can be accomplished by making use of this approach.
➢ The Problems with this approach is that the process is not visible. Also, it is inevitable
that system structure tends to degrade as new increments are added.
Fig:Incremental delievery
Spiral model:
DAVAN NUTAN COLLEGE
Here the process is represented as a spiral rather than as a sequence of activities with
backtracking. Each loop in the spiral represents a phase in the process. There are no fixed
phases such as specification or design. The loops in the spiral are chosen depending on what is
required. Risks are explicitly assessed and resolved throughout the process. Spiral model has
been very influential in helping people think about iteration in software processes and
introducing the risk-driven approach to development. In practice, however, the model is rarely
used as published for practical software development.
Sectors of spiral model
The following are the sectors of the spiral model:
1. Objective setting -Specific objectives for the phase are identified.
2. Risk assessment and reduction-Risks are assessed and activities put in
place to reduce the key risks.
3. Development and validation-A development model for the system is
chosen which can be any of the generic models.
4. Planning-The project is reviewed and the next phase of the spiral is
planned.
DAVAN NUTAN COLLEGE
AGILE DEVOLOPMENT:
Unlike other software development models, assumes that the change is constant so adapt to
change rather than control change
This is very practical and major movement away from conventional software development
models which assume that Requirements will not rapidly change ones we specify them and
Object Oriented models that work with objective of need to design for the future and need to
design for reuse Agile Manifesto and Four Key Ideas in Agile
To produce better software product by reducing the time gap between doing some activity and
gaining feedback.
In order to implement agile manifesto, agile development approach uses four key ideas:
• Individuals and interactions are preferred over processes and tools
• Working software is preferred over comprehensive Documentation
• Customer collaboration is preferred over contract negotiation
• Responding to change is preferred over following a plan
And agile manifesto and agile software development uses following Key Principles.
Key Principles of Agile Manifesto and Agile Software Development
Agile manifesto and agile software development uses following Key Principles.
• #1 Principle: Customer Involvement: Customer Should be Closely involved
throughout the Development Process Their role is provide and priorities new
system requirements and to evaluate the iterations of the system.
• #2 Principle: Incremental Delivery: The Software Developed in Increments
with the customer specifying the requirements to be included in each increment.
DAVAN NUTAN COLLEGE
• #3 Principle: People Not Process: The Skills of Development Team should be
recognized and exploited. Team member should be left to develop their own
ways of working without prescriptive process.
• #4 Principle: Embrace Change: Expect the System Requirements to Change
and so design system to accommodate these changes.
• #5 Principle: Maintain Simplicity: Focus on Simplicity in both the software
being developed and in the development process. Wherever possible, actively
work to eliminate the complexity from the system.
Agile Methods: Where is it Working Well?
Agile methods work very well in small and medium scale software development and teams.
Agile methods are found be effective under situations mentioned below:
• Product Development where software company is developing a small or
medium sized product for sale
• Customer System Development within an organization where there is clear
commitment from the customer involved in the development process and where
there are not a lot of external rules and regulations that affect the software Agile
methods seems to be less effective in project, teams, and software that are large
in size, and also, where systems are safety and mission critical. Agile methods
face issues and failures when
• Putting in a fixed price contract where managing cost & effort becomes more
important over business value. Agile methods since focus on value more than
cost and effort frequently fail to stick to cost and effort.
• Expecting all of the scope to be delivered: Agile methods focus on workable
product and on-time delivery. Hence in agile we can notice negotiating with
scope by reducing or increasing scope when it is found to be of value can be
quite a common characteristic.
DAVAN NUTAN COLLEGE
• Pushing the team hard – making unrealistic demands: Agile uses group
creativity and co-creation and as such team motivation is critical for success.
When we push the team hard by putting unrealistic demands, we can see that it
may result in demotivated team. Demotivated team frequently fails to deliver
value and innovation.
• Focusing on project execution efficiency as against product value delivered:
Project efficiency is all about sticking to scope, effort, schedule, and budget.
Agile accepts changes and hence scope always undergoes change even in later
stages of the software development life cycle and it may consume more effort
and budget. Hence agile methods may not of great value in fixed-budget and
fixed scope projects.
Advantages:
➢ Any time changes are accepted.
➢ Very realistic approach.
➢ Reduces total development time.
➢ Little planning is required.
➢ Updated version of functioning software are released every week or month.
➢ Supports customer involvement and satisfaction.
DAVAN NUTAN COLLEGE
Disadvantage of Agile model:
➢ Due to lack of proper documentation,once the project completes and the
developers are allotted to another project,maintenance of finished project
may become difficult.
Plan Driven And Agile Development:
Learning Objectives
By studying Plan-driven and Agile Development:
• You will understand and appreciate the differences between Agile Development
and Plan-driven Approaches
• You will understand on range of questions to be answered so as to effectively
balance Agile Development and Plan-driven Approaches
DAVAN NUTAN COLLEGE
Introduction
Plan-driven development focuses on sticking to scope, using allocated effort and budget,
sticking to on-time delivery, and compliance with process. It believes that quality product is
result of plan-driven project management and process management.
When compared with plan-driven approach, agile development focuses on providing value and
delivering workable product. Accepting changes and varying scope, using more effort and cost
than allocated are seen frequently in agile development. However agile believes in fixed
schedule ensuring on-time delivery. In brief, agile development believes in workable product
by willingly accepting changes with higher value against that of plan-driven development
wherein ones plan including processes is accepted then changes are discouraged. In this section,
we study the differences between Agile Development and Plan-driven Approaches, and
understand on range of questions to be answered so as to effectively balance Agile
Development and Plan-driven Approaches.
DAVAN NUTAN COLLEGE