Module 01) Introduction To Software Engineering and Process Models Module
Module 01) Introduction To Software Engineering and Process Models Module
By Radha Nabar
Module: 01] Introduction to Software Engineering and Process Models
Introduction:
Defining software: Software is:
(1) Instructions (computer programs) that when executed provide desired features, function,
and performance;
(2) Data structures that enable the programs to adequately manipulate information, and
(3) Descriptive information in both hard copy and virtual forms that describes the operation
and use of the programs.
Software Application Domains: Today, seven broad categories of computer software present
continuing challenges for software engineers:
1. System software: a collection of programs written to service other programs. Some
system software (e.g., compilers, editors, and file management utilities) processes
complex, but determinate, information structures. Other systems applications (e.g.,
operating system components, drivers, networking software, telecommunications
processors) process largely indeterminate data.
2. Application software: stand-alone programs that solve a specific business need.
Applications in this area process business or technical data in a way that facilitates
business operations or management/technical decision making.
3. Engineering/scientific software: a broad array of “number-crunching programs that
range from astronomy to volcanology, from automotive stress analysis to orbital
dynamics, and from computer-aided design to molecular biology, from genetic analysis
to meteorology.
4. 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. Embedded
software can perform limited and esoteric functions (e.g., keypad control for a
microwave oven) or provide significant function and control capability (e.g., digital
functions in an automobile such as fuel control, dashboard displays, and braking
systems).
5. Product-line software: designed to provide a specific capability for use by many
different customers. Product-line software can focus on a limited and esoteric
marketplace (e.g., inventory control products) or address mass consumer.
6. Web/Mobile applications: this network-centric software category spans a wide array
of applications and encompasses both browser-based apps and software that resides on
mobile devices.
7. Artificial intelligence software: 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.
Referring to the figure, computing devices reside outside the cloud and have access to
a variety of resources within the cloud. These resources encompass applications,
Software Engineering (TE SEM V Computer Engineering)
By Radha Nabar Page 2
platforms, and infrastructure. In its simplest form, an external computing device
accesses the cloud via a Web browser or analogous software. The cloud provides access
to data that resides with databases and other data structures. In addition, devices can
access executable applications that can be used in lieu of apps that reside on the
computing device. The implementation of cloud computing requires the development
of an architecture that encompasses front-end and back-end services. The front-end
includes the client (user) device and the application software (e.g., a browser) that
allows the back-end to be accessed. The back-end includes servers and related
computing resources, data storage systems (e.g., databases), server-resident
applications, and administrative servers that use middleware to coordinate and monitor
traffic by establishing a set of protocols for access to the cloud and its resident
resources.
4. Product line software: The Software Engineering Institute defines a software product
line as “a set of software-intensive systems that share a common, managed set of
features satisfying the specific needs of a particular market segment or mission and that
are developed from a common set of core assets in a prescribed way.” The concept of
a line of software products that are related in some way is not new. But the idea that a
line of software products, all developed using the same underlying application and data
architectures, and all implemented using a set of reusable software components that can
be reused across the product line provides significant engineering leverage.
Software Development Life Cycle (SDLC): Software Development Life Cycle, SDLC for
short, is a well-defined, structured sequence of stages in software engineering to develop the
intended software product. SDLC provides a series of steps to be followed to design and
develop a software product efficiently shown in figure 2. SDLC framework includes the
following steps:
1. Planning: 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.
2. Analysis: At this step the developers decide a roadmap of their plan and try to bring up the
best software model suitable for the project. System analysis includes Understanding of
software product limitations, learning system related problems or changes to be done in
existing systems. The project team analyses the scope of the project and plans the schedule and
resources accordingly.
3. Design: Next step is to bring down whole knowledge of requirements and analysis on the
desk and design the software product. The inputs from users and information gathered in
requirement gathering phase are the inputs of this step. The output of this step comes in the
form of two designs; logical design and physical design. Engineers produce meta-data and data
dictionaries, logical diagrams, data-flow diagrams and in some cases pseudo codes.
4. Coding/Implementation: This step is also known as programming phase. The
implementation of software design starts in terms of writing program code in the suitable
programming language and developing error-free executable programs efficiently.
5. Testing: Errors may ruin the software from critical level to its own removal. Software testing
is done while coding by the developers and thorough testing is conducted by testing experts at
various levels of code such as module testing, program testing, product testing, in-house testing
and testing the product at user’s end. Early discovery of errors and their remedy is the key to
reliable software.
1. Process: The foundation for software engineering is the process layer. The software
engineering process is the glue that holds the technology layers together and enables
The Software Process: A process is a collection of activities, actions, and tasks that are
performed when some work product is to be created. An activity strives to achieve a broad
objective (e.g., communication with stakeholders) and is applied regardless of the application
domain, size of the project, complexity of the effort, or degree of rigor with which software
engineering is to be applied. An action (e.g., architectural design) encompasses a set of tasks
that produce a major work product (e.g., an architectural model). A task focuses on a small, but
well-defined objective (e.g., conducting a unit test) that produces a tangible outcome.
In the context of software engineering, a process is not a rigid prescription for how to build
computer software. Rather, it is an adaptable approach that enables the people doing the work
(the software team) to pick and choose the appropriate set of work actions and tasks. The intent
is always to deliver software in a timely manner and with sufficient quality to satisfy those who
have sponsored its creation and those who will use it.
1.1.2 The Capability Maturity Model (CMM): The Software Engineering Institute (SEI)
Capability Maturity Model (CMM) specifies an increasing series of levels of a software
development organization. The higher the level, the better the software development process,
hence reaching each level is an expensive and time-consuming process.
1.1.3 Advanced Trends in Software Engineering: Software engineers will face the
challenges of dealing with rapid change, uncertainty and emergence, dependability, diversity,
and interdependence. Each nation with IT industry has a set of unique characteristics that define
the manner in which business is conducted, the organizational dynamics that arise within a
company, the distinct marketing issues that apply to local customers, and the overriding culture
that dictates all human interaction. However, some trends in each of these areas are universal.
Soft Trends: The trends that have an effect on software engineering technology often come
from the business, organizational, market, and cultural arenas. These “soft trends” can guide
the direction of research and the technology that is derived as a consequence of research.
The broad characteristics of the new systems we build (and test), e.g.
• Emergent requirements
• Autonomy of action
The anthropological and sociological characteristics of the new generation of people who do
software engineering work.
1. Connectivity and collaboration has already led to software teams that do not occupy
the same physical space (telecommuting and part-time employment in a local context).
One team collaborates with other teams that are separated by time zones, primary
language, and culture. Software engineering must respond with an overarching process
model for “distributed teams” that is agile enough to meet the demands of immediacy
but disciplined enough to coordinate disparate groups.
2. Globalization leads to a diverse workforce (in terms of language, culture, problem
resolution, management philosophy, communication priorities, and person-to-person
interaction). This, in turn, demands a flexible organizational structure.
3. Aging population: This undeniable demographic (and cultural trend) implies that
many experienced software engineers and managers will be leaving the field over the
coming decade. The software engineering community must respond with viable
mechanisms that capture the knowledge of these aging managers and technologists.
4. Human culture: Human culture itself will impact the direction of software engineering.
Every generation establishes its own imprint on local culture.
Process Trends: Following are the six ideas proposed by Conradi and Fuggetta are adopted to
suggest possible process trends.
1. As SPI frameworks evolve, they will emphasize “strategies that focus on goal orientation
and product innovation. This means that a stable, step-by-step road map for SPI may have to
be replaced with a framework that emphasizes short-term goals that have a product orientation.
2. SPI activities should “use a simple and focused scorecard to start with, not a large
assessment.”
3. Automated software process technology (SPT) will move away from global process
management to focus on those aspects of the software process that can best benefit from
automation. To be most effective, it should focus on umbrella activities.
4. Greater emphasis will be placed on the return on investment of SPI activities.
5. Much can be learned by examining the sociology of groups to better understand effective
ways to introduce change.
6. New modes of learning may facilitate the transition to a more effective software process. In
this context, “learning” implies learning from successes and mistakes.
1.2 Prescriptive Process Models: A prescriptive process model strives for structure and order
in software development. Activities and tasks occur sequentially with defined guidelines for
progress. We call them “prescriptive” because they prescribe a set of process elements—
framework activities, software engineering actions, tasks, work products, quality assurance,
and change control mechanisms for each project. Each process model also prescribes a process
flow (also called a work flow) that is, the manner in which the process elements are interrelated
to one another.
1.2.1 The Waterfall Model: 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 on-going support of the completed software as shown in figure 6.
A variation in the representation of the waterfall model is called the V-model. Represented in
Figure 7, the V-model depicts the relationship of quality assurance actions to the actions
associated with communication, modelling, and early construction activities. As software team
moves down the left side of the V, basic problem requirements are refined into progressively
more detailed and technical representations of the problem and its solution. Once code has been
Among the problems that are sometimes encountered when the waterfall model is applied are:
1. Real projects rarely follow the sequential flow that the model proposes. Although the linear
model can accommodate iteration, it does so indirectly. As a result, changes can cause
confusion as the project team proceeds.
2. It is often difficult for the customer to state all requirements explicitly. The waterfall model
requires this and has difficulty accommodating the natural uncertainty that exists at the
beginning of many projects.
3. The customer must have patience. A working version of the program(s) will not be available
until late in the project time span.
Today, software work is fast paced and subject to a never-ending stream of changes. The
waterfall model is often inappropriate for such work. However, it can serve as a useful process
model in situations where requirements are fixed and work is to proceed to completion in a
linear manner.
1.2.2 The Incremental Process Models: The incremental model combines the elements linear
and parallel process flows referring to Figure 8, the incremental model applies linear sequences
in a staggered fashion as calendar time progresses. Each linear sequence produces deliverable
“increments” of the software.
For example, word-processing software developed using the incremental paradigm might
deliver basic file management, editing, and document production functions in the first
increment; more sophisticated editing and document production capabilities in the second
increment; spelling and grammar checking in the third increment; and advanced page layout
capability in the fourth increment.
1.2.2.1 The RAD Model: Rapid application development (RAD) is an incremental software
development process model that emphasizes an extremely short development cycle. The RAD
model is a “high-speed” adaptation of the linear sequential model in which rapid development
is achieved by using component-based construction. The RAD approach encompasses the
following phases:
1.2.3 Evolutionary Process Models: Evolutionary models are iterative. They are
characterized in a manner that enables you to develop increasingly more complete versions of
the software.
1.2.3.1 The Prototyping Model: The prototyping paradigm (shown in figure 10) begins with
communication. You meet with other stakeholders to define the overall objectives for the
software, identify whatever requirements are known, and outline areas where further definition
is mandatory.
Prototyping iteration is planned quickly, and modelling in the form of a “quick design” occurs.
A quick design focuses on a representation of those aspects of the software that will be visible
to end users. The quick design leads to the construction of a prototype. The prototype is
deployed and evaluated by stakeholders, who provide feedback that is used to further refine
requirements.
Iteration occurs as the prototype is tuned to satisfy the needs of various stakeholders, while at
the same time enabling you to better understand what needs to be done.
1.2.3.2 The Spiral Model: Originally proposed by Barry Boehm, the spiral model is an
evolutionary software process model that couples the iterative nature of prototyping with the
controlled and systematic aspects of the waterfall model. It provides the potential for rapid
development of increasingly more complete versions of the software.
Boehm describes the model in the following manner:
The spiral development model is a risk-driven process model generator that is used to guide
multi-stakeholder concurrent engineering of software intensive systems. It has two main
distinguishing features. One is a cyclic approach for incrementally growing a system’s degree
of definition and implementation while decreasing its degree of risk. The other is a set of anchor
point milestones for ensuring stakeholder commitment to feasible and mutually satisfactory
system solutions.
Using the spiral model, software is developed in a series of evolutionary releases. During early
iterations, the release might be a model or prototype. During later iterations, increasingly more
complete versions of the engineered system are produced.
A spiral model is divided into a set of framework activities defined by the software engineering
team. Each of the framework activities represent one segment of the spiral path illustrated in
Figure 10. As this evolutionary process begins, the software team performs activities that are
implied by a circuit around the spiral in a clockwise direction, beginning at the centre.
The first circuit around the spiral might result in the development of a product specification;
subsequent passes around the spiral might be used to develop a prototype and then
progressively more sophisticated versions of the software.
The spiral model is a realistic approach to the development of large-scale systems and software.
Because software evolves as the process progresses, the developer and customer better
understand and react to risks at each evolutionary level. The spiral model uses prototyping as
a risk reduction mechanism but, more important, enables you to apply the prototyping approach
at any stage in the evolution of the product. It maintains the systematic stepwise approach
suggested by the classic life cycle but incorporates it into an iterative framework that more
realistically reflects the real world. The spiral model demands a direct consideration of
technical risks at all stages of the project and, if properly applied, should reduce risks before
they become problematic.
But it may be difficult to convince customers that the evolutionary approach is controllable. It
demands considerable risk assessment expertise and relies on this expertise for success. If a
major risk is not uncovered and managed, problems will undoubtedly occur.
1.2.4 Concurrent Model: The concurrent development model, sometimes called concurrent
engineering, allows a software team to represent iterative and concurrent elements of any of
the process models described in this chapter. For example, the modeling activity defined for
the spiral model is accomplished by invoking one or more of the following software
engineering actions: prototyping, analysis, and design.
Figure 12 provides a schematic representation of one software engineering activity within the
modeling activity using a concurrent modeling approach. The activity—modeling—may be in
any one of the states12 noted at any given time. All software engineering activities exist
concurrently but reside in different states.
For example, early in a project the communication activity has completed its first iteration and
exists in the awaiting changes state. The modelling activity (which existed in the inactive state
while initial communication was completed, now makes a transition into the under
development state. If, however, the customer indicates that changes in requirements must be
made, the modeling activity moves from the under development state into the awaiting changes
1.3 Agile process model: Any agile software process is characterized in a manner that
addresses a number of key assumptions about the majority of software projects:
1. It is difficult to predict in advance which software requirements will persist and which will
change. It is equally difficult to predict how customer priorities will change as the project
proceeds.
2. For many types of software, design and construction are interleaved. That is, both activities
should be performed in tandem so that design models are proven as they are created. It is
difficult to predict how much design is necessary before construction is used to prove the
design.
3. Analysis, design, construction, and testing are not as predictable as we might like.
Agility Principles: The Agile Alliance defines 12 agility principles for those who want to
achieve agility:
1. Our highest priority is to satisfy the customer through early and continuous delivery of
valuable software.
2. Welcome changing requirements, even late in development. Agile processes harness change
for the customer's competitive advantage.
3. Deliver working software frequently, from a couple of weeks to a couple of months, with a
preference to the shorter timescale.
4. Business people and developers must work together daily throughout the project.
5. Build projects around motivated individuals. Give them the environment and support they
need, and trust them to get the job done.
6. The most efficient and effective method of conveying information to and within a
development team is face-to-face conversation.
7. Working software is the primary measure of progress.
8. Agile processes promote sustainable development. The sponsors, developers, and users
should be able to maintain a constant pace indefinitely.
9. Continuous attention to technical excellence and good design enhances agility.
10. Simplicity the art of maximizing the amount of work not done is essential.
11. The best architectures, requirements, and designs emerge from self-organizing teams.
12. At regular intervals, the team reflects on how to become more effective, then tunes and
adjusts its behaviour accordingly.
1.3.2 Scrum: Scrum (the name is derived from an activity that occurs during a rugby match)
is an agile software development method that was conceived by Jeff Sutherland and his
development team in the early 1990s. In recent years, further development on the Scrum
methods has been performed by Schwaber and Beedle.
Scrum principles are consistent with the agile manifesto that incorporates the following
framework activities: requirements, analysis, design, evolution, and delivery. The overall flow
of the Scrum process is illustrated in following figure.
Scrum emphasizes the use of a set of software process patterns that have proven effective for
projects with tight timelines, changing requirements, and business criticality. Each of these
process patterns defines a set of development activities:
1.3.3 Kanban: Kanban is a Japanese word that literally means “visual card”. Kanban cards
were originally used in Toyota to limit the amount of inventory tied up in “work in progress”
on a manufacturing floor. Kanban not only reduces excess inventory waste, but also the time
spent in producing it.
Kanban term came into existence using the flavors of “visual card,” “signboard,” or
“billboard”, “signaling system” to indicate a workflow that limits Work In Progress (WIP).
Kanban has been used in Lean Production for over half-century.
The core concept of Kanban includes:
1. Visualize Workflow: Split the entire work into defined segments or states, visualized
as named columns on a wall. Write each item on a card and put in a column to indicate
where the item is in the workflow.
2. Limit WIP: Assign explicit limits to how many items can be in progress at each
workflow segment / state. i.e., Work in Progress (WIP) is limited in each workflow
state.
Benefits of Kanban:
1. Bottlenecks become clearly visible in real-time. This leads people to collaborate to
optimize the whole value chain rather than just their part.
2. Useful for situations where operations and support teams have a high rate of uncertainty
and variability.
3. Tends to spread throughout the organization naturally, including sales and
management. This increases visibility of everything that is going on at the company.
4. Reduces inventory in the range of 25%-75%, thereby reducing company costs.
5. Since all segments/states in the workflow are visually organized, the required items,
reducing the wait times and ensuring speed, continually support all the tasks in the
workflow.
6. Overproduction of inventory is avoided, thereby saving resources and time as well. This
is termed as eliminating waste.
Characteristics of Kanban:
1. Flexibility in Planning: Kanban provides improvements in the workflow. With visual
representation of the workflow, speed of moving from one task to another is reduced.
This is accomplished through the creation of clearly marked flow lanes, Kanban cards
and clearly marked columns to indicate where each item is in the workflow. This allows
a. Sufficient duration for longer tasks that cannot be broken down logically.
b. Preservation of value of such longer tasks.
c. Effort required by each role to be expended.
d. Continuous flow of the tasks that are completed without wait time.
2. Limits Work-In-Progress (WIP): Explicit limits are assigned to number of items that
can be in progress at each workflow state, indicated by a column. This allows
a. Reducing wait time.
b. Avoiding stress on resources at a workflow state.
c. Identifying bottlenecks causing an item to be in a workflow state than the
anticipated time (usually average cycle time) immediately.
d. Resolving bottlenecks with collaboration of the entire team.
e. Decreasing dependencies in completing a task by splitting it into sub-tasks, so
that the sub-task is tracked independently.
3. Pull Approach: When you have two teams and the first one is performing better than
the second one, it is likely that it pushes more work than the other can actually handle.
This often creates friction between the teams. A solution to this is the Pull approach. In
Pull Approach, the next team pulls work only when it is ready for it. Pull Approach is
implemented by adding a buffer with limited capacity between the two teams. The
benefits of Pull Approach are
a. Avoids piling-up of work.
b. Reduces wait time.
c. Facilitates a team to maintain constant pace and focus on quality.
d. Provides resource balancing.
7. Efficiency through Focus: By focusing on what a customer wants, the scope becomes
clear. The focus is on delivering value to the customer. Efficiency can be achieved in
the following ways
a. A customer’s expectations can be made realistic and focused with continuous
interactions with the customer.
b. Focus on the tasks is ensured with a limit on work-in-progress (WIP).
c. The Pull approach enables resources to complete the tasks at hand before a new
task is taken up.
d. Optimizing lead-time (cycle time) results in faster delivery.
e. Visualization of the workflow with Kanban board draws immediate attention to
any bottlenecks that can be resolved immediately.
f. Empowerment of the team makes the team accountable for the success