Software Engineering
Software Engineering
• Programs run within specified constraints and environment, with defined rules of
execution.
• Each standard program has a certain procedure for its execution and operation.
• Data play an important role in program execution for providing useful information in
some form.
• interoperability,
• portability
• usability
• reliability
• robustness
Software characteristics:
• Software has logical properties rather than physical.
Software Classifications:
• Generic software products are developed for general purpose, regardless of the type of
business.
• System software is the computer software that is designed to operate the computer
hardware and manage the functioning of the application software running on it.
– e.g., device drivers, boot program, operating systems, servers, utilities, and so
on.
• Application software is designed to accomplish certain specific needs of the end user.
– e.g., video editing software, word processing software, database software, and
simulation software are some examples of application software etc.
• Artificial Intelligence (AI) software is made to think like human beings and therefore it
is useful in solving complex problems automatically. AI software uses techniques or
algorithms for writing programs to represent and manipulate knowledge.
• Embedded software is a type of software that is built into hardware systems. Embedded
software is used to control, monitor, or assist the operation of equipment, machinery,
or plant.
- e.g., Controllers, real time operating systems, communication protocols
are some examples of embedded software.
– e.g, CAD/CAM, EDA, ESS, SPCS, civil engineering and architectural software, math
calculation software, modeling and simulation software, etc.
• Web software has evolved from a simple website to search engines to web computing.
Web applications are spread over a network (for example, Internet, intranet, and
extranet). Web applications are based on client–server architecture, where the client
requests information and the server stores and retrieves information from the web.
Software Crisis:
• Software crisis, the symptoms of the problem of engineering the software, began to
enforce the practitioners to look into more disciplined software engineering approaches
for software development.
• The software industry has progressed from the desktop PC to network-based computing
to service-oriented computing nowadays.
• The development of programs and software has become complex with increasing
requirements of users, technological advancements, and computer awareness among
people.
Software Engineering:
“Software Engineering is an Engineering, technological and managerial discipline that provides
a systematic approach to the development, operation and maintenance of software”.
• These activities are performed with the help of technological tools, analysis tools,
design tools, testing tools, coding tools and various CASE tools.
• Systematic development of software helps to understand problems and satisfy the client
needs.
• Operational software must be correct, efficient, understandable, and usable for work at
the client site.
The Goal of Software Engineering is to understand customer needs and develop software with
improved quality, on time, and within budget. The productivity of programmers can be
improved if systematic approach is used in production and maintenance of software.
Importance of Software Engineering has risen due to several reasons (or) Several Issues in
Software Development:
• The dynamic nature of changing software technology forces the adoption of software
construction and maintenance processes according to the suitability of the application.
• The mobile nature of software allows changes in requirements as and when required
but changing requirements during development needs a systematic process to
incorporate the changes into software work products.
• Along with development and maintenance, software project management also plays an
important role in the project success.
• The ultimate goal of software practitioners is to produce faster, better, and cost-
effective products.
– Exploratory methodology
– Structure-oriented methodology
– Data-structure-oriented methodology
– Object-oriented methodology
• In exploratory style, errors are detected only during the final product testing.
• Maintenance is very difficult and costly because of the lack of documentation and
multiplicity of changes in the initial proposal.
Structure-Oriented Methodology:
Data-Structure-Oriented Methodology:
• JSD is a useful methodology for concurrent software, real time software, microcode, and
for programming parallel computers because JSD emphasizes actions more and
attributes less.
• Though JSD is good for shaping real world scenario, it is complex and difficult to
understand.
Object-Oriented Methodology:
• Data and procedures are built around these objects. The real world entities are treated
as objects. The objects having characteristics in common are grouped into classes.
• Object-Oriented Analysis (OOA) and Object-Oriented Design (OOD) techniques are used
in object-oriented methodology.
• OOA is used to understand the requirements by identifying objects and classes, their
relationships to other classes, their attributes, and the inheritance relationships among
them.
• OOD creates object models and maps the real world situation into the software
structure.
• Object-oriented methodology is the latest and the most widely-used method for the
development of applications in a variety of domains.
• CBD is a system analysis and design methodology that has evolved from the object-
oriented methodology.
• It is largely based on its focus on reuse.
• Its proponents promise faster time to market, cost reduction, better quality, flexibility,
and scalability. It places large, independently-packaged, reusable components at the
core of software development.
• Reliability
• Abstraction
• Encapsulation
• Incremental development
• Understandability
• Generality
Software Process:
• A software process is a coherent set of activities, procedures, policies, organizational
structures, constraints, technologies, and artifacts that are needed to develop software
products.
• The main goal of a software process is to produce quality software with defined
constraints.
• Each activity of software process involves tools and technologies, procedures, and
artifacts.
• A software project is an entity, with defined start and end, in which a software process
is being used.
• A successful project is the one that conforms with the project constraints (cost,
schedule, and quality criteria).
• A project can have more than one product called work products. A work product is the
intermediate outcome of processes.
Software process, project, and products are interrelated to each other for the development of
software.
Process
Used
Converted
into Produces
Needs of client Project Product
Used in
Resources
• Process models specify the activities, work products, relationships, milestones, etc.
Generic representation of process model:
Generic Process model has 3 Phases that are coordinated and supported by umbrella
activities.
The umbrella activities are responsible for ensuring the proper execution of definition,
development, and implementation phases.
• project management,
• quality assurance,
• configuration management,
• risk management,
• work products preparation and deployment
• Process improvement.
Elements of Software Process:
• Artifacts are tangible work products produced during the development of software.
• People are persons or stakeholders who are directly or indirectly involved in the
process.
• Method or Technique specifies the way to perform an activity using tools and
technology to accomplish the activity.
• Organizational Structure specifies the team of people that should be coordinated and
managed during software development.
Process Classification:
Software processes may be classified as
o The most widely used software development process models are the waterfall
model, prototyping model, spiral model, agile model, RUP, and so on. models.
– The goal of these processes is to carry out the development activities within
time, budget, and resources.
– There are various project management processes, which are scope, budget,
schedule, quality, information, team, risk, and contracts.
– There exist various process improvement process models, such as CMMI, QIP,
continuous quality improvement (CQI), total quality management (TQM), Six
Sigma, and so on.
All these process models provide improvement guidelines and standards for
improving software processes.
– Changes may occur in projects, processes, and products as these entities are
evolutionary in nature.
– There is a need for a lot of efforts and systematic procedures for performing
these changes.
– The main activities of software quality groups are verification and validation,
acceptance testing, measurement and metrics, process consulting, and so on.
– ISO 9000 is a framework that provides certain guidelines for the quality system.
Software Development Life Cycle (SDLC) (or) Phased Development Life Cycle (or)
Software Life cycle:
• Product development process is carried out as a series of certain activities for software
production. Each activity in the process is also referred to as a phase.
• Collectively, these activities are called the software development life cycle (SDLC) or
simply software life cycle and each of these activities are called life cycle phase.
• The SDLC provides a framework that encompasses the activities performed to develop
and maintain software. Some of these models are waterfall, prototyping, spiral,
incremental, agile process, RUP process model, and so on.
Project
initiation
Maintenan Analysis
ce
Deployment Design
Testing Coding
1. Project Initiation
• The aim of project initiation is to study the existing system; determine the feasibility of a
new system; and define the scope, key elements, and a plan for the successful
completion of the project.
• Project initiation involves preliminary investigation, feasibility study, and a project plan.
• Preliminary investigation (PI) is the initial step that gives a clear picture of what actually
the physical system is.
• PI goes through problem identification, background of the physical system, and the
system proposal for a candidate system.
• The purpose of the feasibility study is to determine whether the implementation of the
proposed system will support the mission and objectives of the organization.
• Feasibility study ensures that the candidate system is able to satisfy the user needs;
promotes operational, effective use of resources; and is cost effective.
• There are various types of feasibility study performed, such as technical, economical,
operational, and so on
• Feasibility report is prepared and submitted to the top-level management. A positive
report leads to project initiation.
2. Requirements Analysis
– requirements elicitation
– requirements specification
– requirements verification and validation
3. Software Design
• Software design focuses on the solution domain of the project on the basis of the
requirement document prepared during the analysis phase.
• The goal of the design phase is to transform the collected requirements into a structure
that is suitable for implementation in programming languages.
• The design phase has two aspects: physical design and logical design.
• Physical design concentrates on identifying the different modules or components in a
system that interacts with each other to create the architecture of the system.
• In logical design, the internal logic of a module or component is described in pseudo
code or in an algorithmic manner.
4. Coding
• The coding phase is concerned with the development of the source code that will
implement the design.
• This code is written in a formal language called a programming language, such as
assembly language, C++, Java, etc.
• Good coding efforts can reduce testing and maintenance tasks.
• Programs must be modular so that they can help in rapid development, maintenance,
and enhancements of the system.
• The programs written during the coding phase must be easy to read and understand.
4. Testing
• Before the deployment of the software, testing is performed to remove the defects in
the developed system
• Testing covers various errors at the requirements, design, and coding phases.
• Testing is performed at different levels: unit testing, integration testing, system testing,
and acceptance testing.
• Various special tests are also performed to check the functionality of the system, such as
recovery testing, performance testing, load testing, security testing, and so on.
• Testing is an important technique of software quality assurance.
5. Deployment
• The purpose of software deployment is to make the software available for operational
use.
• It includes various activities to make a system available for assembly and to transfer it to
the customer site.
• Required resources are procured to operate at the customer site and important
information is collected for the deployment process.
• During deployment, all the programs files are loaded onto user’s computer. After
installation of all the modules of the system, training of the user starts.
• Documentation is prepared in the form of a user manual or system operation process
which ensures the continuity of the system.
6. Maintenance
• The maintenance phase comes after the software product is released and put into
operation through the deployment process.
• Software maintenance is performed to adapt to changes in a new environment, correct
bugs, and enhance the performance by adding new features.
• The maintenance activities can be classified as adaptive (changes in the software
environment), perfective (new user requirements), corrective (fixing errors), preventive
(prevent problems in the future).
• The software will age in the near future and enter the retirement stage.
• In extreme cases, the software will be reengineered onto a different platform.
Classical Waterfall Model (or) Prescriptive model (or) Linear- Sequential Model
• This model produces standard outputs at the end of every phase, which is called work
products. This model was enhanced with a feedback process, which is referred to as an
iterative model.
Advantages:
• The main advantage of the waterfall model is that it is easy to understand and
implement.
• Due to the straightforward organization of phases, it is fit for other engineering process
models, such as civil, mechanical, etc.
• It is a document-driven process that can help new people to transfer knowledge.
• Milestones and deliverables at each stage can be used to monitor the progress of the
project.
Disadvantages:
• The model assumes that the requirements will not change during the project.
Sometimes, it is unrealistic to expect accurate requirements early in a project.
• It is very difficult to estimate the time and cost in the waterfall model.
• There may be difference of opinions among the specialists because there are specialized
teams for each individual phase.
• The people mentally ready to work in a phase will have to wait until its previous phase is
completed.
• Due to so much emphasis on documentation, sometimes people may become irritated.
• Fixing the software and hardware technology early may create problems for larger
projects.
• There is no inherent risk management policy in this model.
• Poor model for long and ongoing projects.
• This model is used only when the requirements are very well known, clear and fixed.
• Product definition is stable.
• Technology is understood.
• There are no ambiguous requirements
• Ample(sufficient) resources with required expertise are available freely
• The project is short.
• The life cycle phases are organized similar to those in the classical waterfall model. The
only difference is backtracking of phases on detection of errors at any stage.
• The errors can come at any stage of the development life cycle.
• Once a defect is detected there is a need to go back to the phase where it was
introduced.
• On defect detection at the source, some of the work performed during that phase and
all the subsequent phases may be revised.
• On error detection at any phase, it may be required that the preceding and succeeding
phases be changed.
• Detecting and removing defects earlier in the process of software development is called
phase containment of errors.
• The iterative waterfall model is the most widely used model and it is simple to apply it in
projects.
Disadvantages:
• There is a possibility of blocking states, which can slow down the productivity and
efficiency of the process.
• A new technology is being used and is being learnt by the development team while
working on the project.
Prototyping Model
• The prototype model is well suited for projects where requirements are difficult to
understand and the customer is not confident in illustrating and clarifying the
requirements.
• It fits best where the customer risks are related to the changing requirements (software
and hardware requirements) of the projects.
Advantages:
• Using Prototype model, customer can get a feeling of the prototype version of the final
product very early.
• It helps to find clear requirements and resolves various technical issues early in actual
development, which may involve higher cost during testing and maintenance phases.
• It minimizes the change request from customer side and the associated redesign and
development costs.
Disadvantages:
• But this model requires exclusive involvement of the customer, which is not always
possible.
• Sometimes bad design decisions during prototype development may propagate to the
real product.
Incremental Model
• The incremental model is an intuitive approach to the waterfall model with fewer
restrictions.
• The activities are performed in the same order as in the waterfall model, but they are
conducted in several iterations.
• The requirements are functionally divided and prioritized according to the needs of the
customers.
• A blueprint of the product based on the prioritized requirements is also designed, which
describes dependency of tasks on each other.
• A project control list is prepared, describing the order of the tasks to be performed and
outcomes of the task to be released.
• Each task in the project control list is treated as a mini project. Each item in the list is a
module, which is to be developed in increments.
• Each task is removed from the project control list and developed using the waterfall
model in a sequential manner.
• Each new release is integrated with the existing increments to provide enhanced
functionality with each delivered increment.
• The length of iterations is generally kept very short and fine. For example, iteration can
be duration of 6 weeks, 10 weeks, etc.
• The number of iterations depends upon the nature of the project and the features it
supports.
• This model is suitable for larger projects where requirements are somewhat clear and
which need phase-wise implementation.
• Also, it is widely used by many commercial software companies and system vendors.
Advantages:
• The main advantage of the incremental model is the early production of working
software during the software life cycle.
• Because each module is tested thoroughly, there is little possibility to change scope and
requirements in the final software.
• Due to incremental development, testing and debugging of each module become easier.
• This model is also helpful in handling risks (technical, requirements, usability, etc.)
because risky modules are identified and handled in a separate iteration.
Disadvantages:
• Each phase of iteration is rigid and does not overlap another. Therefore, coordination
between iterations is required for better quality products.
• The spiral model is an iterative software development approach, which was proposed
by Boehm in 1988.
• The main focus of this model is identification and resolution of potential risks (product
risks, project risks, and process risks).
• Each loop in the spiral is split into four quadrants. Each of these four quadrants is used
for the development of each phase.
In this quadrant, objectives of a specific phase are determined within the project
scope. The product and process constraints (cost, schedule) are defined.
The aspects of uncertainties that are sources of possible risks( product risk,
project risk, process risk) are identified. This may involve prototyping,
benchmarking, simulation, analytical modeling etc.
If the prototype is functionally useful and there is less possibility of risks, the
product evaluation begins using the development model.
Upon successful completion of the phase, a plan is proposed for initiating the
next phase of the project.
• The radial dimension represents the cumulative cost incurred so far for the
development of phases in a project.
• The angular dimension indicates the progress made so far in completing each cycle.
• It is considered a meta model because it incorporates the features of all other models,
which are the waterfall, prototyping, incremental, simulation, and performance models.
• The performance of prototype development is evaluated using benchmarking tools,
simulation models, and customer feedback.
• This model is most suitable for projects having high risks and also for large, complex,
and ambitious projects.
Advantage:
• The iterative and risk-driven approach of the spiral model is widely used in software
development.
• Development is fast and features are added in a systematic way
• Continuous or repeated development helps in risk management
• There is always a space for customer feedback
Disadvantage:
• Expertise is required for defining objectives, risk identification and resolution, and
illustrating the spiral steps.
• Documentation is more as it has intermediate phases
• It is not advisable for smaller project, it might cost them a lot
• Some of the manifesto's authors formed the agile alliance. The manifesto of agile
software development is as follows:
“We are uncovering better ways of developing software by doing it and helping others
to do it”.
o However, XP is difficult to get representative of customers, who can sit with the
team and work with them daily.
• The XP process is the most suitable practice for dynamically changing requirements,
projects having risks, small developer groups, and non-fixed scope or price contract.
• This practice produces good quality products for the regular involvement of customers.
Disadvantages:
• However, XP is difficult to get representative of customers, who can sit with the team
and work with them, daily.
• Also, there is a problem of architectural design because the incremental style of
development means that inappropriate architectural decisions are made at an early
stage of the process.
Scrum:
• Scrum is another popular agile framework with a set of roles and practices.
• It is also an iterative process with the idea of timeboxing, which is known as sprint.
• Scrum relies on a self-organizing, cross-functional team.
• There are two roles in the Scrum process: pigs and chickens.
• Pigs group includes product owner, Scrum master, and a Scrum team.
• The group “chickens” involves users, stakeholders, and managers
• In the Scrum process, product backlog describes "what" will be built, which is managed
by the product owner.
• The RUP process is openly published, distributed, and supported for operation.
Disadvantages:
• It establishes the business case for the system and delimit the project scope.
• The business case includes success criteria, risk assessment, and estimate of the
resources needed; and a phase plan showing dates of major milestones.
• This phase produces vision document of the project, initial use-case model, initial risk
assessment, business model, and a project plan showing the phases and iterations.
• At this stage, customers will be clear with their requirement and life cycle objectives
milestone will be produced.
Elaboration phase:
Construction phase:
• During the construction phase, all application features are developed, integrated, and
thoroughly tested.
• This phase also focuses on the user manuals and the current release details.
• At the end of this phase, a beta release becomes operational for the customers.
Transition phase:
• The purpose of the transition phase is to move the software product to the user
community for working.
• This phase includes several iterations, including beta releases, general availability
releases, as well as bug-fix and enhancement releases.
• Effort is made in developing user-oriented documentation, training users, supporting
users in their initial product use, and reacting to user feedback.