SE UNIT - I
SE UNIT - I
Software is more than just a program code. A program is an executable code, which serves some
computational purpose. Software is considered to be a collection of executable programming code,
associated libraries and documentations. Software, when made for a specific requirement is called
software product.
Engineering on the other hand, is all about developing products, using well-defined, scientific principles
and methods. So, we can define software engineering as an engineering branch associated with the
development of software product using well-defined scientific principles, methods and procedures. The
outcome of software engineering is an efficient and reliable software product.
IEEE defines software engineering as: The application of a systematic, disciplined, quantifiable approach
to the development, operation and maintenance of software
The need of software engineering arises because of higher rate of change in user requirements and
environment on which the software is working.
Large software - It is easier to build a wall than to a house or building, likewise, as the size of software
become large engineering has to step to give it a scientific process.
Scalability- If the software process were not based on scientific and engineering concepts, it would be
easier to re-create new software than to scale an existing one.
Cost- As hardware industry has shown its skills and huge manufacturing has lower down the price of
computer and electronic hardware. But the cost of software remains high if proper process is not
adapted.
Dynamic Nature- The always growing and adapting nature of software hugely depends upon the
environment in which the user works. If the nature of software is always changing, new enhancements
need to be done in the existing one. This is where software engineering plays a good role.
Quality Management- Better process of software development provides better and quality software
product
EVOLVING ROLE OF SOFTWARE:
Software takes dual role. It is both a product and a vehicle for delivering a product. As a product: It
delivers the computing potential embodied by computer Hardware or by a network of computers. As a
vehicle: It is information transformer-producing, managing, acquiring, modifying, displaying, or
transmitting information that can be as simple as single bit or as complex as a multimedia presentation.
Software delivers the most important product of our time-information
Later 1990s:
Yourdon reevaluated the prospects of the software professional and suggested “the rise and
• resurrection” of the American programmer. The impact of the Y2K “time bomb” was at the end of
20th century
• 2000s progressed:
Johnson discussed the power of “emergence” a phenomenon that explains what happens when
• interconnections among relatively simple entities result in a system that “self-organizes to form more
intelligent, more adaptive behavior”. Yourdon revisited the tragic events of 9/11 to discuss the
continuing impact of global terrorism on the IT community Wolfram presented a treatise on a “new
kind of science” that posits a unifying theory based
• primarily on sophisticated software simulations Daconta and his colleagues discussed the evolution of
“the semantic web”
.• Today a huge software industry has become a dominant factor in the economies of the industrialized
world.
CHANGING NATURE OF SOFTWARE
The 7 broad categories of computer software present continuing challenges for software engineers:
1) System software
2) Application software
3) Engineering/scientific software
4) Embedded software
5) Product-line software
6) Web-applications
7) Artificial intelligence software.
System software: System software is a collection of programs written to service other programs. The
systems software is characterized by - heavy interaction with computer hardware - heavy usage by
multiple users - concurrent operation that requires scheduling, resource sharing, and sophisticated
process management - complex data structures - multiple external interfaces E.g. compilers, editors and
file management utilities.
Application software: - Application software consists of standalone programs that solve a specific
business need. - It facilitates business operations or management/technical decision making. - It is used
to control business functions in real-time E.g. point-of-sale transaction processing, real-time
manufacturing process control.
Embedded software: - Embedded software resides within a product or system and is used to
implement and control features and functions for the end-user and for the system itself. - It can perform
limited and esoteric functions or provide significant function and control capability.
Product-line software: Designed to provide a specific capability for use by many different customers,
product-line software can focus on a limited and esoteric market place or address mass consumer
markets E.g. Word processing, spreadsheets, computer graphics, multimedia, entertainment, database
management, personal and business financial applications
Web-applications: WebApps are evolving into sophisticated computing environments that not only
provide standalone features, computing functions, and content to the end user, but also are integrated
with corporate databases and business applications.
Artificial intelligence software: AI software makes use of nonnumerical algorithms to solve complex
problems that are not amenable to computation or straightforward analysis. Application within this area
includes robotics, expert systems, pattern recognition, artificial neural networks, theorem proving, and
game playing.
• Ubiquitous computing
• Netsourcing
• Open source
• The “new economy”
Ubiquitous computing: The challenge for software engineers will be to develop systems and application
software that will allow small devices, personal computers and enterprise system to communicate
across vast networks.
Net sourcing: The challenge for software engineers is to architect simple and sophisticated applications
that provide benefit to targeted end-user market worldwide.
Open Source: The challenge for software engineers is to build source that is self descriptive but more
importantly to develop techniques that will enable both customers and developers to know what
changes have been made and how those changes manifest themselves within the software.
The “new economy”: The challenge for software engineers is to build applications that will facilitate
mass communication and mass product distribution.
SOFTWARE CHARACTERISTICS
Although some similarities exist between software development and hardware manufacturing, the
two activities are fundamentally different. In both activities, high quality is achieved through good
design, but the manufacturing phase for hardware can introduce quality problems that are
nonexistent (or easily corrected) for software. Both activities are dependent on people, but the
relationship between people applied and work accomplished is entirely different (see Chapter 24).
Both activities require the construction of a “product,” but the approaches are different. Software
costs are concentrated in engineering. This means that software projects cannot be managed as if
they were manufacturing projects.
2. Software doesn’t “wear out.”
The relationship, often called the “bathtub curve,” indicates that hardware exhibits relatively
high failure rates early in its life;
defects are corrected and the failure rate drops to a steady-state level (hopefully, quite low) for
some period of time. As time passes, however, the failure rate rises again as hardware
components suffer from the cumulative effects of dust, vibration, abuse, temperature extremes,
and many other environmental maladies.
Stated simply, the hardware begins to wear out. Software is not susceptible to the
environmental maladies that cause hardware to wear out. In theory, therefore, the failure rate
curve for software should take the form of the “idealized curve” shown in Figure 1.2.
Undiscovered defects will cause high failure rates early in the life of a program. However, these
are corrected and the curve flattens as shown. The idealized curve is a gross oversimplification
of actual failure models for software. However, the implication is clear—software doesn’t wear
out. But it does deteriorate!
During its life,2 software will undergo change. As changes are made, it is likely that errors will be
introduced, causing the failure rate curve to spike as shown in the “actual curve” . Before the
curve can return to the original steady-state failure rate, another change is requested, causing
the curve to spike again. Slowly, the minimum failure rate level begins to rise—the software is
deteriorating due to change. Another aspect of wear illustrates the difference between
hardware and software. When a hardware component wears out, it is replaced by a spare part.
There are no software spare parts. Every software failure indicates an error in design or in the
process through which design was translated into machine executable code. Therefore, the
software maintenance tasks that accommodate requests for change involve considerably more
complexity than hardware maintenance.
SOFTWARE MYTHS
Software myths—erroneous beliefs about software and the process that is used to build it—can be
traced to the earliest days of computing. Myths have a number of attributes that make them insidious.
most software engineering professionals recognize myths for what they are—misleading attitudes that
have caused serious problems for managers and practitioners alike.
Software engineering is a layered technology. Any engineering approach must rest on an organizational
commitment to quality. The bedrock that supports software engineering is a quality focus. The
foundation for software engineering is the process layer. Software engineering process is the glue that
holds the technology layers. Process defines a framework that must be established for effective delivery
of software engineering technology. The software forms the basis for management control of software
projects and establishes the context in which
In brief "A process defines who is doing what, when, and how to reach a certain goal."
A Process Framework
1) Communication: This framework activity involves heavy communication and collaboration with the
customer and encompasses requirements gathering and other related activities.
2) Planning: This activity establishes a plan for the software engineering work that follows. It describes
the technical tasks to be conducted, the risks that are likely, the resources that will be required, the
work products to be produced, and a work schedule.
3) Modeling: This activity encompasses the creation of models that allow the developer and customer to
better understand software requirements and the design that will achieve those requirements. The
modeling activity is composed of 2 software engineering actions- analysis and design.
4) Construction: This activity combines core generation and the testing that is required to uncover the
errors in the code.
5) Deployment: The software is delivered to the customer who evaluates the delivered product and
provides feedback based on the evolution.
These 5 generic framework activities can be used during the development of small programs, the
creation of large web applications, and for the engineering of large, complex computer-based systems.
The following are the set of Umbrella Activities
. 1) Software project tracking and control – allows the software team to assess progress against the
project plan and take necessary action to maintain schedule.
2) Risk Management - assesses risks that may effect the outcome of the project or the quality of the
product.
3) Software Quality Assurance - defines and conducts the activities required to ensure software quality.
4) Formal Technical Reviews - assesses software engineering work products in an effort to uncover and
remove errors before they are propagated to the next action or activity.
5) Measurement - define and collects process, project and product measures that assist the team in
delivering software that needs customer’s needs, can be used in conjunction with all other framework
and umbrella activities.
6) Software configuration management - manages the effects of change throughout the software
process.
7) Reusability management - defines criteria for work product reuse and establishes mechanisms to
achieve reusable components.
8) Work Product preparation and production - encompasses the activities required to create work
products such as models, document, logs, forms and lists.
Intelligent application of any software process model must recognize that adaption is essential for
success but process models do differ fundamentally in:
• The overall flow of activities and tasks and the interdependencies among activities and tasks
• The degree through which work tasks are defined within each frame work activity.
• The degree through which work products are identified and required.
• The manner which quality assurance activities are applied.
• The manner in which project tracking and control activities are applied.
• The overall degree of the detailed and rigor with which the process is described.
• The degree through which the customer and other stakeholders are involved with the project.
• The level of autonomy given to the software project team.
• The degree to which team organization and roles are prescribed
Level 0: Incomplete. The process area is either not performed or does not achieve all goals and
objectives defined by CMMI for level 1 capability.
Level 1: Performed. All of the specific goals of the process area have been satisfied. Work tasks
required to produce defined work products are being conducted.
Level 2: Managed. All level 1 criteria have been satisfied. In addition, all work associated with the
process area conforms to an organizationally defined policy; all people doing the work have access to
adequate resources to get the job done; stakeholders are actively involved in the process area as
required; all work tasks and work products are “monitored, controlled, and reviewed;
Level 3: Defined. All level 2 criteria have been achieved. In addition, the process is “tailored from the
organizations set of standard processes according to the organizations tailoring guidelines, and
contributes and work products, measures and other process-improvement information to the
organizational process assets”.
Level 4: Quantitatively managed. All level 3 criteria have been achieved. In addition, the process area is
controlled and improved using measurement and quantitative assessment.”Quantitative objectives for
quality and process performance are established and used as criteria in managing the process”
Level 5: Optimized. All level 4 criteria have been achieved. In addition, the process area is adapted and
optimized using quantitative means to meet changing customer needs and to continually improve the
efficacy of the process area under consideration”
The CMMI defines each process area in terms of “specific goals” and the “specific practices” required to
achieve these goals. Specific practices refine a goal into a set of process-related activities.
The specific goals (SG) and the associated specific practices(SP) defined for project planning are
SG 1 Establish estimates
In addition to specific goals and practices, the CMMI also defines a set of five generic goals and related
practices for each process area. Each of the five generic goals corresponds to one of the five capability
levels. Hence to achieve a particular capability level, the generic goal for that level and the generic
practices that correspond to that goal must be achieved. To illustrate, the generic goals (GG) and
practices (GP) for the project planning process area are
PROCESS PATTERNS
The software process can be defined as a collection patterns that define a set of activities, actions, work
tasks, work products and/or related behaviors required to develop computer software. A process
pattern provides us with a template- a consistent method for describing an important characteristic of
the software process. A pattern might be used to describe a complete process and a task within a
framework activity.
Pattern Name: The pattern is given a meaningful name that describes its function within the software
process.
Intent: The objective of the pattern is described briefly.
Type: The pattern type is specified. There are three types
1. Task patterns define a software engineering action or work task that is part of the process and
relevant to successful software engineering practice. Example: Requirement Gathering
2. Stage Patterns define a framework activity for the process. This pattern incorporates multiple task
patterns that are relevant to the stage. Example: Communication
3. Phase patterns define the sequence of framework activities that occur with the process, even when
the overall flow of activities is iterative in nature. Example: Spiral model or prototyping.
Initial Context: The conditions under which the pattern applies are described prior to the initiation of
the pattern, we ask
(1) What organizational or team related activities have already occurred.
(2) What is the entry state for the process
(3) What software engineering information or project information already exists
Problem: The problem to be solved by the pattern is described.
Solution: The implementation of the pattern is described. This section describes how the initial state of
the process is modified as a consequence the initiation of the pattern. It also describes how software
engineering information or project information that is available before the initiation of the pattern is
transformed as a consequence of the successful execution of the pattern
Resulting Context: The conditions that will result once the pattern has been successfully implemented
are described. Upon completion of the pattern we ask
(1) What organizational or team-related activities must have occurred
(2) What is the exit state for the process
(3) What software engineering information or project information has been developed?
Known Uses: The specific instances in which the pattern is applicable are indicated Process patterns
provide and effective mechanism for describing any software process. The patterns enable a software
engineering organization to develop a hierarchical process description that begins at a high-level of
abstraction. Once process pattern have been developed, they can be reused for the definition of process
variants-that is, a customized process model can be defined by a software team using the pattern as
building blocks for the process models.
PROCESS ASSESSMENT
The existence of a software process is no guarantee that software will be delivered on time, that it will
meet the customer’s needs, or that it will exhibit the technical characteristics that will lead to long-term
quality characteristics. In addition, the process itself should be assessed to be essential to ensure that it
meets a set of basic process criteria that have been shown to be essential for a successful software
engineering
A Number of different approaches to software process assessment have been proposed over the past
few decades.
Standards CMMI Assessment Method for Process Improvement (SCAMPI) provides a five step process
assessment model that incorporates initiating, diagnosing, establishing, acting & learning. The SCAMPI
method uses the SEI CMMI as the basis for assessment.
CMM Based Appraisal for Internal Process Improvement (CBA IPI) provides a diagnostic technique for
assessing the relative maturity of a software organization, using the SEI CMM as the basis for the
assessment.
SPICE (ISO/IEC15504) standard defines a set of requirements for software process assessments. The
intent of the standard is to assist organizations in developing an objective evaluation of the efficacy of
any defined software process.
ISO 9001:2000 for Software is a generic standard that applies to any organization that wants to improve
the overall quality of the products, system, or services that it provides. Therefore, the standard is
directly applicable to software organizations &companies.
Personal software process (PSP) emphasizes personal measurement of both the work product that is
produced and the resultant quality of the work product.
The PSP process model defines five framework activities: planning, high-level design, high level design
review, development, and postmortem.
Planning: This activity isolates requirements and, base on these develops both size and resource
estimates. In addition, a defect estimate is made. All metrics are recorded on worksheets or templates.
Finally, development tasks are identified and a project schedule is created.
High level design: External specifications for each component to be constructed are developed and a
component design is created. Prototypes are built when uncertainty exists. All issues are recorded and
tracked.
High level design review: Formal verification methods are applied to uncover errors in the design.
Metrics are maintained for all important tasks and work results.
Development: The component level design is refined and reviewed. Code is generated, reviewed,
compiled, and tested. Metrics are maintained for all important task and work results.
Postmortem: Using the measures and metrics collected the effectiveness of the process is determined.
Measures and metrics should provide guidance for modifying the process to improve its effectiveness.
PSP stresses the need for each software engineer to identify errors early and, as important, to
understand the types of errors that he is likely to make. PSP represents a disciplined, metrics-based
approach to software engineering.
Team software process (TSP): The goal of TSP is to build a “self-directed project team that organizes
itself to produce high-quality software.
The following are the objectives for TSP:
Build self-directed teams that plan and track their work, establish goals, and own their processes and
plans. These can be pure software teams or integrated product teams(IPT) of 3 to about 20 engineers.
Show managers how to coach and motivate their teams and how to help them sustain peak
performance.
Accelerate software process improvement by making CMM level 5 behavior normal and expected
TSP defines the following framework activities: launch, high-level design, implementation, integration
and test, and postmortem.
TSP makes use of a wide variety of scripts, forms, and standards that serve to guide team members in
their work.
Scripts define specific process activities and other more detailed work functions that are part of the
team process.
Each project is “launched” using a sequence of tasks.
The following launch script is recommended
• Review project objectives with management and agree on and document team goals
• Establish team roles
• Define the teams development process
• Make a quality plan and set quality targets
• Plan for the needed support facilities
PROCESS MODELS
Prescriptive process models define a set of activities, actions, tasks, milestones, and work products that
are required to engineer high-quality software. These process models are not perfect, but they do
provide a useful roadmap for software engineering work. A prescriptive process model populates a
process framework with explicit task sets for software engineering actions.
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, modeling, construction, and deployment.
Context: Used when requirements are reasonably well understood.
Advantage: It can serve as a useful process model in situations where requirements are fixed and work
is to proceed to complete in a linear manner.
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 exist at the beginning of many
projects.
3. The customer must have patience. A working version of the programs will not be available until late in
the project time-span. If a major blunder is undetected then it can be disastrous until the program is
reviewed.
Feasibility study - The main aim of feasibility study is to determine whether it would be financially and
technically feasible to develop the product.
• At first project managers or team leaders try to have a rough understanding of what is required
to be done by visiting the client side. They study different input data to the system and output
data to be produced by the system. They study what kind of processing is needed to be done on
these data and they look at the various constraints on the behavior of the system.
• After they have an overall understanding of the problem they investigate the different solutions
that are possible. Then they examine each of the solutions in terms of what kind of resources
required, what would be the cost of development and what would be the development time for
each solution.
• Based on this analysis they pick the best solution and determine whether the solution is feasible
financially and technically. They check whether the customer budget would meet the cost of the
product and whether they have sufficient technical expertise in the area of development.
Requirements analysis and specification: - The aim of the requirements analysis and specification phase
is to understand the exact requirements of the customer and to document them properly. This phase
consists of two distinct activities, namely
• Requirements gathering and analysis
• Requirements specification
The goal of the requirements gathering activity is to collect all relevant information from the customer
regarding the product to be developed. This is done to clearly understand the customer requirements so
that incompleteness and inconsistencies are removed.
The requirements analysis activity is begun by collecting all relevant data regarding the product to be
developed from the users of the product and from the customer through interviews and discussions. For
example, to perform the requirements analysis of a business accounting software required by an
organization, the analyst might interview all the accountants of the organization to ascertain their
requirements. The data collected from such a group of users usually contain several contradictions and
ambiguities, since each user typically has only a partial and incomplete view of the system. Therefore it
is necessary to identify all ambiguities and contradictions in the requirements and resolve them through
further discussions with the customer. After all ambiguities, inconsistencies, and incompleteness have
been resolved and all the requirements properly understood, the requirements specification activity can
start. During this activity, the user requirements are systematically organized into a Software
Requirements Specification (SRS) document. The customer requirements identified during the
requirements gathering and analysis activity are organized into a SRS document. The important
components of this document are functional requirements, the nonfunctional requirements, and the
goals of implementation.
Design: - The goal of the design phase is to transform the requirements specified in the SRS document
into a structure that is suitable for implementation in some programming language. In technical terms,
during the design phase the software architecture is derived from the SRS document. Two distinctly
different approaches are available: the traditional design approach and the object-oriented design
approach. Traditional design approach -Traditional design consists of two different activities; first• a
structured analysis of the requirements specification is carried out where the detailed structure of the
problem is examined. This is followed by a structured design activity. During structured design, the
results of structured analysis are transformed into the software design. Object-oriented design
approach -In this technique, various objects that occur in the• problem domain and the solution domain
are first identified, and the different relationships that exist among these objects are identified. The
object structure is further refined to obtain the detailed design.
Coding and unit testing:-The purpose of the coding phase (sometimes called the implementation
phase) of software development is to translate the software design into source code. Each component
of the design is implemented as a program module. The end-product of this phase is a set of program
modules that have been individually tested. During this phase, each module is unit tested to determine
the correct working of all the individual modules. It involves testing each module in isolation as this is
the most efficient way to debug the errors identified at this stage.
Integration and system testing: -Integration of different modules is undertaken once they have been
coded and unit tested. During the integration and system testing phase, the modules are integrated in a
planned manner. The different modules making up a software product are almost never integrated in
one shot. Integration is normally carried out incrementally over a number of steps. During each
integration step, the partially integrated system is tested and a set of previously planned modules are
added to it. Finally, when all the modules have been successfully integrated and tested, system testing is
carried out. The goal of system testing is to ensure that the developed system conforms to its
requirements laid out in the SRS document. System testing usually consists of three different kinds of
testing activities:
α – testing: It is the system testing performed by the development team.
• β –testing: It is the system testing performed by a friendly set of customers.
• Acceptance testing: It is the system testing performed by the customer himself after the product
delivery to determine whether to accept or reject the delivered product.
System testing is normally carried out in a planned manner according to the system test plan document.
The system test plan identifies all testing-related activities that must be performed, specifies the
schedule of testing, and allocates resources. It also lists all the test cases and the expected outputs for
each test case.
Maintenance: -Maintenance of a typical software product requires much more than the effort necessary
to develop the product itself. Many studies carried out in the past confirm this and indicate that the
relative effort of development of a typical software product to its maintenance effort is roughly in the
40:60 ratios. Maintenance involves performing any one or more of the following three kinds of activities:
• Correcting errors that were not discovered during the product development phase. This is•
called corrective maintenance.
• Improving the implementation of the system, and enhancing the functionalities of the• system
according to the customer’s requirements. This is called perfective maintenance.
• Porting the software to work in a new environment. For example, porting may be• required to
get the software to work on a new computer platform or with a new operating system. This is
called adaptive maintenance.
• The incremental model delivers a series of releases called increments that provide progressively
more functionality for the customer as each increment is delivered.
• When an incremental model is used, the first increment is often a core product. That is, basic
requirements are addressed. The core product is used by the customer. As a result, a plan is
developed for the next increment.
• The plan addresses the modification of the core product to better meet the needs of the
customer and the delivery of additional features and functionality.
• This process is repeated following the delivery of each increment, until the complete product is
produced.
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.
To overcome the major shortcomings of the classical waterfall model, we come up with the iterative
waterfall model.
Here, we provide feedback paths for error correction as & when detected later in a phase. Though
errors are inevitable, but it is desirable to detect them in the same phase in which they occur. If so, this
can reduce the effort to correct the bug.
The advantage of this model is that there is a working model of the system at a very early stage of
development which makes it easier to find functional or design flaws. Finding issues at an early stage of
development enables to take corrective measures in a limited budget.
The disadvantage with this SDLC model is that it is applicable only to large and bulky software
development projects. This is because it is hard to break a small software system into further small
serviceable increments/modules.
Difference: The incremental process model, like prototyping and other evolutionary approaches, is
iterative in nature. But unlike prototyping, the incremental model focuses on delivery of an operational
product with each increment
THE RAD MODEL: Rapid Application Development (RAD) is an incremental software process model that
emphasizes a short development cycle. The RAD model is a “high-speed” adaption of the waterfall
model, in which rapid development is achieved by using a component base construction approach.
Context: If requirements are well understood and project scope is constrained, the RAD process enables
a development team to create a “fully functional system” within a very short time period.
If a system cannot be properly modularized, building the components necessary for RAD will be
problematic
If high performance is an issue, and performance is to be achieved through tuning the interfaces to
system components, the RAD approach may not work; and RAD may not be appropriate when technical
risks are high.
Evolutionary models are iterative. They are characterized in a manner that enables software engineers
to develop increasingly more complete versions of the software.
PROTOTYPING:
Prototyping is more commonly used as a technique that can be implemented within the context of
anyone of the process model. The prototyping paradigm begins with communication. The software
engineer and customer meet and 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 modeling occurs. The quick design leads to the construction of a prototype. The
prototype is deployed and then evaluated by the customer/user. Iteration occurs as the prototype is
tuned to satisfy the needs of the customer, while at the same time enabling the developer to better
understand what needs to be done.
Context: If a customer defines a set of general objectives for software, but does not identify detailed
input, processing, or output requirements, in such situation prototyping paradigm is best approach. If a
developer may be unsure of the efficiency of an algorithm, the adaptability of an operating system then
he can go for this prototyping method.
Advantages: The prototyping paradigm assists the software engineer and the customer to better
understand what is to be built when requirements are fuzzy. The prototype serves as a mechanism for
identifying software requirements. If a working prototype is built, the developer attempts to make use
of existing program fragments or applies tools.
Prototyping can be problematic for the following reasons:
1. The customer sees what appears to be a working version of the software, unaware that the
prototype is held together “with chewing gum and baling wire”, unaware that in the rush to get it
working we haven’t considered overall software quality or long-term maintainability. When
informed that the product must be rebuilt so that high-levels of quality can be maintained, the
customer cries foul and demands that “a few fixes” be applied to make the prototype a working
product. Too often, software development relents.
2. The developer often makes implementation compromises in order to get a prototype working
quickly. An inappropriate operating system or programming language may be used simply because
it is available and known; an inefficient algorithm may be implemented simply to demonstrate
capability. After a time, the developer may become comfortable with these choices and forget all
the reasons why they were inappropriate. The less-than-ideal choice has now become an integral
part of the system.
Another reason for developing a prototype is that it is impossible to get the perfect product in the first
attempt. Many researchers and engineers advocate that if you want to develop a good product you
must plan to throw away the first version. The experience gained in developing the prototype can be
used to develop the final product. A prototyping model can be used when technical solutions are
unclear to the development team. A developed prototype can help engineers to critically examine the
technical issues associated with the product development. Often, major design decisions depend on
issues like the response time of a hardware controller, or the efficiency of a sorting algorithm, etc. In
such circumstances, a prototype may be the best or the only way to resolve the technical issues.
Anchor point milestones- a combination of work products and conditions that are attained
along• the path of the spiral- are noted for each evolutionary pass.
The first circuit around the spiral might result in the development of product specification;
subsequent passes around the spiral might be used to develop a prototype and then
progressively more sophisticated versions of the software.
Each pass through the planning region results in adjustments to the project plan. Cost and
schedule are adjusted based on feedback derived from the customer after delivery. In
addition, the project manager adjusts the planned number of iterations required to
complete the software.
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 first circuit around the spiral might represent a “concept development project” which
starts at the core of the spiral and continues for multiple iterations until concept
development is complete. If the concept is to be developed into an actual product, the
process proceeds outward on the spiral and a “new product development project”
commences. Later, a circuit around the spiral might be used to represent a “product
enhancement project.” In essence, the spiral, when characterized in this way, remains
operative until the software is retired.
Context: The spiral model can be adopted to apply throughout the entire life cycle of an
application, from concept development to maintenance.
Advantages: It provides the potential for rapid development of increasingly more complete
versions of the software.
The spiral model is a realistic approach to the development of large-scale systems and
software. The spiral model uses prototyping as a risk reduction mechanism but, more
importantly enables the developer to apply the prototyping approach at any stage in the
evolution of the product.
Draw Backs: The spiral model is not a panacea. 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.
The Spiral model of software development is shown in fig. 4.1. The diagrammatic
representation of this model appears like a spiral with many loops. The exact number of
loops in the spiral is not fixed. Each loop of the spiral represents a phase of the software
process. For example, the innermost loop might be concerned with feasibility study, the
next loop with requirements specification, the next one with design, and so on. Each phase
in this model is split into four sectors (or quadrants) as shown in fig. 4.1. The following
activities are carried out during each phase of a spiral model.
The evolutionary approach is suitable for large problems which can be decomposed into a
set of modules for incremental development and delivery. This model is also widely used for
objectoriented development projects. Of course, this model can only be used if the
incremental delivery of the system is acceptable to the customer.
The spiral model is called a meta model since it encompasses all other life cycle models. Risk
handling is inherently built into this model. The spiral model is suitable for development of
technically challenging software products that are prone to several kinds of risks. However,
this model is much more complex than the other models – this is probably a factor
deterring its use in ordinary projects.
The different software life cycle models can be compared from the viewpoint of the
customer. Initially, customer confidence in the development team is usually high
irrespective of the development model followed. During the lengthy development process,
customer confidence normally drops off, as no working product is immediately visible.
Developers answer customer queries using technical slang, and delays are announced. This
gives rise to customer resentment. On the other hand, an evolutionary approach lets the
customer experiment with a working product much earlier than the monolithic approaches.
Another important advantage of the incremental model is that it reduces the customer’s
trauma of getting used to an entirely new system. The gradual introduction of the product
via incremental phases provides time to the customer to adjust to the new product. Also,
from the customer’s financial viewpoint, incremental development does not require a large
upfront capital outlay. The customer can order the incremental versions as and when he
can afford them