Unit 1 Software:: Software Is Developed or Engineered It Is Not Manufactured in The Classical Sense
Unit 1 Software:: Software Is Developed or Engineered It Is Not Manufactured in The Classical Sense
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.
(3) Documents that describes the operation and use of the programs.
Software has characteristics that are considerably different than those of hardware:
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, both activities require the construction of a “product,” but
the approaches are different.
Figure 1.1. depicts failure rate as a function of time for hardware. 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 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. i.e. the hardware begins to wear out.
Software is not susceptible to the environmental maladies. 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. 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” (Figure 1.2). 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(to become worse as time passes) due to change.
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 is
considerably more complex than hardware maintenance.
Figure 1.1.Failure curve for hardware Figure 1.2.Failure curve for software
In the hardware world, component reuse is a natural part of the engineering process. In the
software world, it is something that has only begun to be achieved on a broad scale.
The 7 broad categories of computer software present continuing challenges for software engineers:
• System software
• Application software
• Engineering/scientific software
• Embedded software
• Product-line software
• Web-applications
• Artificial intelligence software.
System software: System software is a collection of programs written to service other programs.
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.
E.g. Digital functions in automobile, dashboard displays, braking systems etc.
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.
Introduction:
In the early days of the World Wide Web (1990 to 1995), websites consisted of little more than a
set of linked hypertext files that presented information using text and limited graphics.
Today, WebApps have evolved into sophisticated computing tools that not only provide stand-
alone function to the end user, but also have been integrated with corporate databases and
business applications due to the development of HTML, JAVA, xml etc.
Attributes of WebApps:
Network Intensiveness
Concurrency
Unpredictable load
Performance
Availability
Data driven
Content Sensitive
Continuous evolution
Immediacy
Security
Aesthetic
Network intensiveness:
A WebApp resides on a network and must serve the needs of a diverse community of clients.
The network may enable worldwide access and communication (i.e., the Internet) or more
limited access and communication (e.g., a corporate Intranet Network Intensiveness)
Unpredictable load:
The number of users of the WebApp may vary by orders of magnitude from day to day. One
hundred users may show up on Monday; 10,000 may use the system on Thursday.
Performance:
If a WebApp user must wait too long (for access, for server side processing, for client-side
formatting and display), he or she may decide to go elsewhere.
Availability:
Although expectation of 100 percent availability is unreasonable, users of popular WebApps
often demand access on a 24/7/365 basis.
Data driven: The primary function of many WebApps is to use hypermedia to present text,
graphics, audio, and video content to the end user.
In addition, WebApps are commonly used to access information that exists on databases that are
not an integral part of the Web-based environment (e.g., e-commerce or financial applications).
Content sensitive:
The quality and artistic nature of content remains an important determinant of the quality of a
WebApp.
Continuous evolution:
Unlike conventional application software that evolves over a series of planned, chronologically
spaced releases, Web applications evolve continuously. It is not unusual for some WebApps
(specifically, their content) to be updated on a minute-by-minute schedule or for content to be
independently computed for each request.
Immediacy:Although immediacy—the compelling (forceful) needs to get software to market
quickly—is a characteristic of many application domains, WebApps often exhibit a time-to-
market that can be a matter of a few days or weeks.
Security:
Because WebApps are available via network access, it is difficult, if not impossible, to limit the
population of end users who may access the application. In order to protect sensitive content and
provide secure mode of data transmission, strong security measures must be implemented.
Aesthetics: [Artistic / Visual]
An undeniable part of the appeal of a WebApp is its look and feel. When an application has been
designed to market or sell products or ideas, aesthetic may have as much to do with success as
technical design.
SOFTWARE ENGINEERING
Software engineering is defined as 'the application of a systematic, disciplined, quantifiable
approach to the development, operation, and maintenance and retirement of software.
Software engineering can be defined as a systematic approach to develop software within
specified time and budget. One of the main objectives of software engineering is to help
developers to obtain high quality software.
F S
iayS
gtso
u itf Customer needs
rset
efm w Customer needs
ia
SOFTWARE PROCESS
1etr
A process is a collection of activities, actions, and tasks that are performed when some work
.sie
product is to be created.
3c An activity
An has set of s/w engineering actions. (e.g., communication with stakeholders)
action (e.g., architectural design) encompasses a set of tasks that produce a major
:q work product (e.g., an architectural design model).
a Aproduces
u task focuses on a small, but well-defined objective (e.g., conducting a unit test) that
a tangible outcome.
S apby identifying a smallestablishes
A process framework the foundation for a complete software engineering process
number of framework activities that are applicable to all software
olpprojects, regardless of their size or complexity.
fir A generic process framework for software engineering encompasses five activities:
to Communication: involves heavy communication with the customer (and other
w ya stakeholders) and encompasses requirements gathering.
ac Planning: Describes the technical tasks to be conducted, the risks that are likely,
resources that will be required, the work products to be produced and a work schedule.
rch Modeling: encompasses the creation of models that allow the developer and customer to
er better understand S/W req. and the design that will achieve those req.
i Construction: combines code generation and the testing required uncovering errors in
the code.
et
n e Deployment: deliver the product to the customer who evaluates the delivered product
and provides feedback.
gr
i
n a
A Process Framework defines set of umbrella activities applicable across entire s/w process.
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.
Pattern Name: The pattern is given a meaningful name that describes its function within the
software process.
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
Stage Patterns define a framework activity for the process. This pattern incorporates
multiple task patterns that are relevant to the stage.
Example: Communication
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
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
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.
General principles
Seven principles that focus on software engineering practice as a whole.
Management myths
Customer myths
Practitioner’s myths
Management myths:
Myth: We already have a book that’s full of standards and procedures for building software.
Won’t that provide my people with everything they need to know?
Reality: The book of standards may very well exist,
but is it used?
Are software practitioners aware of its existence?
Does it reflect modern software engineering practice?
Is it complete?
Is it adaptable?
Is it streamlined to improve time-to-delivery while still maintaining a focus on
quality?
In many cases, the answer to all of these questions is “no.”
Myth: If we get behind schedule, we can add more programmers and catch up
Reality: As new people are added, people who were working must spend time educating the
newcomers, thereby reducing the amount of time spent on productive development
effort. People can be added but only in a planned and well coordinated manner.
Myth: If I decide to outsource the software project to a third party, I can just relax and let that
firm build it.
Reality: If an organization does not understand how to manage and control software projects
internally, it will invariably struggle when it outsources software projects.
Customer myths:
Myth: A general statement of objectives is sufficient to begin writing programs—we can fill in
the details later.
Reality: Although a comprehensive and stable statement of requirements is not always possible,
an ambiguous “statement of objectives” is a recipe for disaster. Unambiguous
requirements (usually derived iteratively) are developed only through effective and
continuous communication between customer and developer.
Myth: Software requirements continually change, but change can be easily accommodated
because software is flexible.
Reality: Impact of change depends on where and when it occurs in the software life cycle
(requirements analysis, design, code, test) When requirements changes are requested
early (before design or code has been started), the cost impact is relatively small.
However, as time passes, the cost impact grows rapidly—resources have been
committed, a design framework has been established, and change can cause confusion
that requires additional resources and major design modification.
Practitioner’s myths:
Myth: Once we write the program and get it to work, our job is done.
Reality: Industry data indicate that between 60 and 80 percent of all effort expended on software
will be expended after it is delivered to the customer for the first time.
Myth: Until I get the program “running” I have no way of assessing its quality.
Reality: Software reviews are a “quality filter” that have been found to be more effective than
testing for finding certain classes of software defects.
Myth: The only deliverable work product for a successful project is the working program.
Reality: A working program is only one part of a software configuration that includes many
elements. A variety of work products (e.g., models, documents, plans) provide a
foundation for successful engineering and, more important, guidance for software
support.
Myth: Software engineering will make us create voluminous and unnecessary documentation
and will invariably slow us down.
Reality: Software engineering is not about creating documents. It is about creating a quality
product. Better quality leads to reduced rework. And reduced rework results in faster
delivery times.
The existence of a software process is no guarantee that software will be delivered on time, that it will
meet the customer’s needs.
Numbers of different approaches to process assessment and improvement have been proposed over
the past few decades.
Application:
A variation in the representation of the waterfall model is called the V-model. It is also known as
Verification and Validation model.
V-MODEL
The V-Model is an extension of the waterfall model and is based on the association of a testing
phase for each corresponding development stage. This means that for every single phase in the
development cycle, there is a directly associated testing phase. This is a highly-disciplined model
and the next phase starts only after completion of the previous phase.
Under the V-Model, the corresponding testing phase of the development phase is planned in
parallel. So, there are Verification phases on one side of the ‘V’ and Validation phases on the
other side. The Coding Phase joins the two sides of the V-Model.
Module Design In this phase, the detailed internal design for all the system modules are
specified, referred to as Low Level Design (LLD). Unit testing is associated with this phase.
Coding Phase The actual coding of the system modules designed in the design phase is taken up
in the Coding phase. The best suitable programming language is decided based on the system
and architectural requirements.
Advantages:
Disadvantages:
Application:
Disadvantages
Application
Disadvantages
Application
Advantages
• 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.
Disadvantages
• 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.
Application
Software Prototyping is most useful in development of systems having high level of user
interactions such as online systems.
Spiral Model:
• The spiral model is an iterative software development approach, which was proposed by
Boehm in 1988.
• In this model, activities are organized as a spiral with many loops.
• Each loop in the spiral represents a phase of software development.
• The exact number of loops in the spiral is not fixed.
• 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.
– Determine objectives, alternatives, and constraints(Planning)
– Evaluate alternatives; identify and resolve risks(Risk Analysis)
– Develop, verify the next level product(Development and Testing)
– Plan for the next phase(Evaluation)
• The redial 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.
Advantages
Disadvantages
Application
The activity modeling may be in anyone of the states noted at any given time. Similarly, other
activities or tasks can be represented in an analogous manner. All activities exist concurrently but
reside in different states.
Any of the activities of a project may be in a particular state at any one time
1. under development
2. awaiting changes
3. under revision
4. under review
In a project the communication activity has completed its first iteration and exists in the
awaiting changes state. The modeling activity which existed in the none state while initial
communication was completed, now makes a transition into the under development state. If the
customer indicates that changes in requirements must be made, the modeling activity moves from
the under development state into the awaiting changes state.
The concurrent process model defines a series of events that will trigger transitions from
state to state for each of the software engineering activities, actions, or tasks.
The event analysis model correction which will trigger the analysis action from the done
state into the awaiting changes state.
Application: The concurrent model is often more appropriate for system engineering projects
where different engineering teams are involved.
Advantages:
• The concurrent process model is applicable to all types of software development and
provides an accurate picture of the current state of a project.
• It defines a network of activities rather than each activity, action, or task on the
network exists simultaneously with other activities, action and tasks.
•
This model consists of the following process steps
– Available component-based products are researched and evaluated for the
application domain in question
– Component integration issues are considered
– A software architecture is designed to accommodate the components
– Components are integrated into the architecture
– Comprehensive testing is conducted to ensure proper functionality
Advantage
• The component-based development model leads to software reuse, and reusability makes
reduction in development cycle time as well as a reduction in project cost.
The Unified process recognizes the importance of customer communication and streamlined methods
for describing the customer’s view of a system.
It emphasizes the important role of software architecture and “helps the architect focus on the right
goals, such as understandability, reliance to future changes, and reuse“.
It suggests a process flow that is iterative and incremental, providing the evolutionary feel that is
essential in modern software development.
• Inception
• Elaboration
• Construction
• Transition
• production
1. Inception Phase
• The inception phase of the UP encompasses both customer communication and planning
activities.
• By collaborating with the customer and end-users, business requirements for the software
are identified, a rough architecture for the system is proposed and a plan for the iterative,
incremental nature of the ensuing project is developed.
2. Elaboration phase
• It encompasses the customer communication and modeling activities of the generic
process model.
• Elaboration refines and expands the preliminary use-cases that were developed as part of
the inception phase and expands the architectural representation to include five different
views of the software- the use-case model, the analysis model, the design model, the
implementation model, and the deployment model.
3. Construction Phase
• Encompasses the construction activity of the generic process.
• Uses the architectural model from the elaboration phase as input.
• Develops or acquires the software components that make each use-case operational.
• Analysis and design models from the previous phase are completed to reflect the final version
of the increment
• Use cases are used to derive a set of acceptance tests that are executed prior to the next phase.
4. Transition Phase
• Encompasses the last part of the construction activity and the first part of the
deployment activity of the generic process.
• Software is given to end users for beta testing and user feedback reports on defects
and necessary changes.
• The software teams create necessary support documentation (user manuals, trouble-
shooting guides, installation procedures).
• At the conclusion of this phase, the software increment becomes a usable software
release.
5. Production Phase
• Encompasses the last part of the deployment activity of the generic process
• On-going use of the software is monitored
• Support for the operating environment (infrastructure) is provided
• Defect reports and requests for changes are submitted and evaluated
The best software process is one that is close to the people who will be doing the work.
Each software engineer would create a process that best fits his or her needs, and at
the same time meets the broader needs of the team and the organization.
The team itself would create its own process, and at the same time meet the narrower
needs of individuals and the broader needs of the organization.
The 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: 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.
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.
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 behaviors normal and
expected.
Provide improvement guidance to high-maturity organizations.
Facilitate university teaching of industrial-grade team skills.