Software-Engineering Lecture - 02 - Notes
Software-Engineering Lecture - 02 - Notes
Lecture No. 2
Software Process
Software Engineering is a “systematic, disciplined, and quantifiable” approach applied by one software
team may be burdensome to another. We need discipline, but we also need adaptability and agility.
Software engineering is a layered technology. Referring to below figure, any engineering approach
(including software engineering) must rest on an organizational commitment to quality. Total quality
management, Six Sigma, and similar philosophies foster a continuous process improvement culture, and
it is this culture that ultimately leads to the development of increasingly more effective approaches to
software engineering. The bedrock that supports software engineering is a quality focus.
The foundation for software engineering is the process layer. The software engineering process is the
glue that holds the technology layers together and enables rational and timely development of
computer software. Process defines a framework that must be established for effective delivery of
software engineering technology. The software process forms the basis for management control of
software projects and establishes the context in which technical methods are applied, work products
(models, documents, data, reports, forms, etc.) are produced, milestones are established, quality is
ensured, and change is properly managed.
Software engineering methods provide the technical how-to’s for building software. Methods
encompass a broad array of tasks that include communication, requirements analysis, design modeling,
program construction, testing, and support. Software engineering methods rely on a set of basic
principles that govern each area of the technology and include modeling activities and other descriptive
techniques. Software engineering tools provide automated or semiautomated support for the process
and the methods. When tools are integrated so that information created by one tool can be used by
another, a system for the support of software development, called computer-aided software
engineering, is established.
Process Framework
A process was defined as a collection of work activities, actions, and tasks that are performed when
some work product is to be created. Each of these activities, actions, and tasks reside within a
framework or model that defines their relationship with the process and with one another. Referring to
the figure, each framework activity is populated by a set of software engineering actions. Each software
engineering action is defined by a task set that identifies the work tasks that are to be completed, the
work products that will be produced, the quality assurance points that will be required, and the
milestones that will be used to indicate progress.
A generic process framework for software engineering defines five framework activities—
communication, planning, modeling, construction, and deployment. In addition, a set of umbrella
activities—project tracking and control, risk management, quality assurance, configuration
management, technical reviews, and others—are applied throughout the process.
1. Communication
Involves communication among the customer and other stake holders; encompasses
requirements gathering
2. Planning
Establishes a plan for software engineering work; addresses technical tasks, resources,
work products, and work schedule
Encompasses the creation of models to better under the requirements and the design
5. Deployment
Software Process is a set of required activities. And the outcome of the activities with a target to
produce a software product. A software process is a flowchart of developing a software product. Which
includes fathering requirements, then analyzing those requirements. Likewise scheduling development
phases, checking the developments, implementing changes, and many more. This can be till the delivery
of the final software product to the after delivery service methods and more.
Software Specification
The customer and the engineers gathers and analyze the features, workflow, operational constraints or
limitations of the final software product. This part is common in every all software process. Despite of
how big or small, simple or complex the software product is. It defines the main functionalities of the
software and the constrains around them.
After all the specifications, goals for the software product are fixed, engineers starts developing the
software. Which not only includes coding but also gathering required artworks, audio and visual
elements for the software product.
Software Validation
Software product must be checked for existing bugs, incomplete or unavailable features, and many
more. It may be done multiple times (milestones) during the software development phase. In other
words, the software must conforms to it’s specification and meets the customer needs.
Software Evolution
Software evolution is the term used in software engineering to refer to the process of developing
software initially. Then repeatedly updating it for various reasons.
Process Description
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.
What is SDLC?
SDLC is a process followed for a software project, within a software organization. It consists of a detailed
plan describing how to develop, maintain, replace and alter or enhance specific software. The life cycle
defines a methodology for improving the quality of software and the overall development process.
The following figure is a graphical representation of the various stages of a typical SDLC.
Stages of SDLC
Requirement analysis is the most important and fundamental stage in SDLC. It is performed by the
senior members of the team with inputs from the customer, the sales department, market surveys and
domain experts in the industry. This information is then used to plan the basic project approach and to
conduct product feasibility study in the economical, operational and technical areas.
Planning for the quality assurance requirements and identification of the risks associated with the
project is also done in the planning stage. The outcome of the technical feasibility study is to define the
various technical approaches that can be followed to implement the project successfully with minimum
risks.
Once the requirement analysis is done the next step is to clearly define and document the product
requirements and get them approved from the customer or the market analysts. This is done through an
SRS (Software Requirement Specification) document which consists of all the product requirements to
be designed and developed during the project life cycle.
SRS is the reference for product architects to come out with the best architecture for the product to be
developed. Based on the requirements specified in SRS, usually more than one design approach for the
product architecture is proposed and documented in a DDS - Design Document Specification.
This DDS is reviewed by all the important stakeholders and based on various parameters as risk
assessment, product robustness, design modularity, budget and time constraints, the best design
approach is selected for the product.
A design approach clearly defines all the architectural modules of the product along with its
communication and data flow representation with the external and third party modules (if any). The
internal design of all the modules of the proposed architecture should be clearly defined with the
minutest of the details in DDS.
In this stage of SDLC the actual development starts and the product is built. The programming code is
generated as per DDS during this stage. If the design is performed in a detailed and organized manner,
code generation can be accomplished without much hassle.
Developers must follow the coding guidelines defined by their organization and programming tools like
compilers, interpreters, debuggers, etc. are used to generate the code. Different high level programming
languages such as C, C++, Pascal, Java and PHP are used for coding. The programming language is chosen
with respect to the type of software being developed.
This stage is usually a subset of all the stages as in the modern SDLC models, the testing activities are
mostly involved in all the stages of SDLC. However, this stage refers to the testing only stage of the
product where product defects are reported, tracked, fixed and retested, until the product reaches the
quality standards defined in the SRS.
Stage 6: Deployment in the Market and Maintenance Once the product is tested and ready to be
deployed it is released formally in the appropriate market. Sometimes product deployment happens in
stages as per the business strategy of that organization. The product may first be released in a limited
segment and tested in the real business environment (UAT- User acceptance testing).
Then based on the feedback, the product may be released as it is or with suggested enhancements in
the targeting market segment. After the product is released in the market, its maintenance is done for
the existing customer base.
Waterfall Model
The Waterfall Model was the first Process Model to be introduced. It is also referred to as a linear-
sequential life cycle model. It is very simple to understand and use. In a waterfall model, each phase
must be completed before the next phase can begin and there is no overlapping in the phases.
The Waterfall model is the earliest SDLC approach that was used for software development.
The waterfall Model illustrates the software development process in a linear sequential flow. This
means that any phase in the development process begins only if the previous phase is complete. In this
waterfall model, the phases do not overlap.
Waterfall approach was first SDLC Model to be used widely in Software Engineering to ensure success
of the project. In "The Waterfall" approach, the whole process of software development is divided into
separate phases. In this Waterfall model, typically, the outcome of one phase acts as the input for the
next phase sequentially.
The following illustration is a representation of the different phases of the Waterfall Model.
All these phases are cascaded to each other in which progress is seen as flowing steadily downwards
(like a waterfall) through the phases. The next phase is started only after the defined set of goals are
achieved for previous phase and it is signed off, so the name "Waterfall Model". In this model, phases
do not overlap.
Every software developed is different and requires a suitable SDLC approach to be followed based on
the internal and external factors. Some situations where the use of Waterfall model is most
appropriate are −
Requirements are very well documented, clear and fixed.
Product definition is stable.
Technology is understood and is not dynamic.
There are no ambiguous requirements.
Ample resources with required expertise are available to support the product.
The project is short.
The advantages of waterfall development are that it allows for departmentalization and control. A
schedule can be set with deadlines for each stage of development and a product can proceed through
the development process model phases one by one.
Development moves from concept, through design, implementation, testing, installation,
troubleshooting, and ends up at operation and maintenance. Each phase of development proceeds in
strict order.
Some of the major advantages of the Waterfall Model are as follows −
Simple and easy to understand and use
Easy to manage due to the rigidity of the model. Each phase has specific deliverables and a
review process.
Phases are processed and completed one at a time.
Works well for smaller projects where requirements are very well understood.
Clearly defined stages.
Well understood milestones.
Easy to arrange tasks.
Process and results are well documented.
The disadvantage of waterfall development is that it does not allow much reflection or revision. Once
an application is in the testing stage, it is very difficult to go back and change something that was not
well-documented or thought upon in the concept stage.
The major disadvantages of the Waterfall Model are as follows −
No working software is produced until late during the life cycle.
High amounts of risk and uncertainty.
Not a good model for complex and object-oriented projects.
Poor model for long and ongoing projects.
Not suitable for the projects where requirements are at a moderate to high risk of changing. So,
risk and uncertainty is high with this process model.
It is difficult to measure progress within stages.
Cannot accommodate changing requirements.
Adjusting scope during the life cycle can end a project.
Integration is done as a "big-bang. at the very end, which doesn't allow identifying any
technological or business bottleneck or challenges early.
When to use the waterfall model
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 resources with required expertise are available freely.
The project is short.
Incremental Model
In incremental model the whole requirement is divided into various builds. Multiple development cycles
take place here, making the life cycle a “multi-waterfall” cycle.Incremental Model is a process of
software development where requirements are broken down into multiple standalone modules of
software development cycle. Incremental development is done in steps from analysis design,
implementation, testing/verification, maintenance.
Each iteration passes through the requirements, design, coding and testing phases. And each
subsequent release of the system adds function to the previous release until all designed functionality
has been implemented.
The system is put into production when the first increment is delivered. The first increment is often a
core product where the basic requirements are addressed, and supplementary features are added in the
next increments. Once the core product is analyzed by the client, there is plan development for the next
increment.
1. Staged Delivery Model – Construction of only one part of the project at a time.
2. Parallel Development Model – Different subsystems are developed at the same time. It can decrease the
calendar time needed for the development, i.e. TTM (Time to Market), if enough Resources are available.
Advantages Disadvantages
It is flexible and less expensive to change Problems might cause due to system
requirements and scope architecture as such not all requirements
collected up front for the entire software
lifecycle
Throughout the development stages Each iteration phase is rigid and does not
changes can be done overlap each other
This model is less costly compared to Rectifying a problem in one unit requires
others correction in all the units and consumes a
lot of time