UNIT-1 Software Process and Agile Development
UNIT-1 Software Process and Agile Development
UNIT-1 Software Process and Agile Development
1.1 INTRODUCTION
1.1.1 Software
Computer programs and associated documentation
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) descriptive information in both hard copy and virtual forms that describes the operation
and use of the programs
Software takes on a dual role. It is a product, and at the same time, the vehicle for delivering
a product.
Software Characteristics
Software is a logical rather than a physical system element.
Application software
Application software are stand-alone programs that solve a specific business need.
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 in within a product or system and is used to control products and
systems for the consumer and industrial markets.
e.g., keypad control for a microwave oven, digital functions in an automobile such as fuel
control, dashboard displays, and braking systems
Product-line software
designed to provide a specific capability for use by many different customers.
e.g., inventory control products, word processing, spreadsheets, computer graphics and
personal and business financial applications
Web applications
WebApps are sophisticated computing environments that not only provide stand-alone
features, computing functions, and content to the end user, but also are integrated with
corporate databases and business applications
The establishment and use of sound engineering principles in order to economically obtain
software that is reliable and works efficiently on real machines
A Quality focus
The bedrock that supports software engineering is a quality focus.
Total quality management, Six Sigma and similar philosophies foster a continuous
process improvement culture, and this culture ultimately leads to the development of
increasingly more mature approaches to software engineering.
Process
The foundation for software engineering is the process layer.
Software engineering process is the glue that holds the technology layers together and
enables rational and timely development of computer software.
Process defines a framework for a set of key process areas (KPAs) that must be
established for effective delivery of software engineering technology.
The key process areas form the basis for management control of software projects and
establish the context in which technical methods are applied, work products (models,
documents, data, reports, forms, etc.) are produced, milestones are established, quality is
ensured, and change is properly managed.
Methods
Methods provide the technical how-to's for building software.
Methods encompass a broad array of tasks that include requirements analysis, design,
program construction, testing, and support.
Software engineering methods rely on a set of basic principles that govern each area of
the technology and include modeling activities and other descriptive techniques.
Tool
Tools provide automated or semi-automated support for the process and the methods.
When tools are integrated so that information created by one tool can be used by another,
a system for the support of software development, called computer-aided software
engineering is established.
1.2 SOFTWARE PROCESS
Software Process
It is a 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 encompasses a set of tasks that produce a major work product.
A task focuses on a small, but well-defined objective (e.g., conducting a unit test) that
produces a tangible outcome.
In addition, the process framework encompasses a set of umbrella activities that are
applicable across the entire software process.
A generic process framework for software engineering defines five framework activities
1. Communication
This framework activity involves heavy communication and collaboration with the
customer and other stakeholders
It encompasses requirements gathering and other related activities that help define
software features and functions.
2. Planning
This activity establishes a plan for the software engineering work.
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 the
customer to better understand software requirements and the design that will achieve those
requirements.
1. Analysis
2. Design
4. Construction
This activity combines code generation (either manual or automated) and testing, i.e.,
required to uncover errors in the code.
5. Deployment
The software (as a complete entity or as a partially completed increment) is delivered to
the customer who evaluates the delivered product and provides feedback based on the
evaluation.
Process Flow
Linear process flow executes each of the five activities in sequence.
An iterative process flow repeats one or more of the activities before proceeding to the
next.
An evolutionary process flow executes the activities in a circular manner. Each circuit
through the five activities leads to a more complete version of the software.
A parallel process flow executes one or more activities in parallel with other activities
(modeling for one aspect of the software in parallel with construction of another aspect of the
software)
1.3 PRESCRIPTIVE PROCESS MODELS
Prescriptive Process Models
It prescribes 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
The software process model is also known as software development life cycle (SDLC)
model
Various Perspective models are
Waterfall Model
Incremental Process Models
Incremental Model
RAD Model
Evolutionary Process Models
Prototyping
The Spiral Model
Concurrent Models
Communication
This is the first phase of waterfall model which includes a meeting with the customer to
understand his requirements.
The information domains, function, behavioral requirements of the system are
understood.
Requirement gathering and Analysis phase the basic requirements of the system must be
understood by software engineer.
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.
Construction
The design must be translated into a machine-readable form.
The code generation step performs this task.
Once code has been generated, program testing begins.
The testing process focuses on the logical internals of the software, ensuring that all
statements have been tested, and
On the functional externals; that is, conducting tests to uncover errors and ensure that
defined input will produce actual results that agree with required results.
Deployment
The software is delivered to the customer who evaluates the delivered product and
provides feedback based on the evaluation.
Software will undoubtedly undergo change after it is delivered to the customer.
Change will occur because errors have been encountered, because the software must be
adapted to accommodate changes in its external environment (e.g., a change required because
of a new operating system or peripheral device), or because the customer requires functional
or performance enhancements.
Software support/maintenance reapplies each of the preceding phases to an existing
program.
The linear nature of the classic life cycle leads to “blocking states” in which some project
team members must wait for other members of the team to complete dependent tasks.
The project requires the fulfillment of one phase, before proceeding to the next.
Waterfall Model Advantages
Easy to understand, easy to use
Provides structure to inexperienced staff
Milestones are well understood
Sets requirements stability
Good for management control (plan, staff, track)
Works well when quality is more important than cost or schedule
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.
Ideally, the prototype serves as a mechanism for identifying software requirements.
If a working prototype is built, the developer attempts to use existing program fragments
or applies tools (e.g., report generators, window managers) that enable working programs to
be generated quickly.
Prototyping Disadvantages
Customers may press for immediate delivery of working but inefficient products
The developer often makes implementation compromises in order to get a prototype
working quickly
Iterative process continues forever which cannot be stopped at a particular stage.
Prototyping Advantages
Iterative process facilitating enhancements.
Partial products can be viewed by the customer.
Flexibility of the product.
Customer satisfaction of the product.
1. Available component-based products are researched and evaluated for the application
domain in question.
2. Component integration issues are considered.
3. A software architecture is designed to accommodate the components.
4. Components are integrated into the architecture.
5. Comprehensive testing is conducted to ensure proper functionality.
The component-based development model leads to software reuse, and reusability
provides software engineers with a number of measurable benefits.
Software engineering team can achieve a reduction in development cycle time as well as
a reduction in project cost
When formal methods are used during design, they serve as a basis for program
verification and therefore enable to discover and correct errors that might otherwise go
undetected.
Concerns about its applicability
o The development of formal models is currently quite time consuming and expensive.
o Because few software developers have the necessary background to apply formal methods,
extensive training is required.
o It is difficult to use the models as a communication mechanism for technically
unsophisticated customers.
The formal methods approach is mainly used in building safety-critical software (e.g.,
developers of aircraft avionics and medical devices) and among developers that would suffer
severe economic hardship should software errors occur
1.4.3 Aspect-Oriented Software Development
As modern computer-based systems become more sophisticated (and complex), certain
concerns—customer required properties or areas of technical interest—span the entire
architecture.
Some concerns are high-level properties of a system (e.g., security, fault tolerance). Other
concerns affect functions (e.g., the application of business rules), while others are systemic
(e.g., task synchronization or memory management)
When concerns cut across multiple system functions, features, and information, they are
often referred to as crosscutting concerns.
Aspectual requirements define those crosscutting concerns that have an impact across the
software architecture.
Aspect-oriented software development (AOSD), often referred to as aspect-oriented
programming (AOP), is a software engineering paradigm that provides a process and
methodological approach for defining, specifying, designing, and constructing aspects—
“mechanisms beyond subroutines and inheritance for localizing the expression of a
crosscutting concern”
It will adopt characteristics of both evolutionary and concurrent process models.
The evolutionary model is appropriate as aspects are identified and then constructed.
The parallel nature of concurrent development is essential because aspects are engineered
independently of localized software components and aspects have a direct impact on these
components.
It is essential to instantiate asynchronous communication between the software process
activities applied to the engineering and construction of aspects and components
Introduction to Agility
• Highest priority is to satisfy the customer through early & continuous delivery if
software
• Welcome changing requirements
• Deliver working software frequently
• Business people and developers must work together
• Build projects around motivated individuals
• Emphasize face-to-face conversation
• Working software is the measure of progress
• Continuous attention to technical excellence and good design
• Simplicity – the art of maximizing the amount of work done
• The best designs emerge from self-organizing teams
• The team tunes and adjusts its behaviour to become more effective
Agile Process Models
Modelling (AM)
Extreme Programming (XP)
• The most widely used approach to agile software development
• A variant of XP called Industrial XP (IXP) has been proposed to target process for
large organizations
• It uses object oriented approach as its preferred development model
XP Values
• Communication: To achieve effective communication, it emphasized close &
informal (verbal) collaboration between customers and developers
• Simplicity: It restricts developers to design for immediate needs not for future
needs
• Feedback: It is derived from three sources the implemented software, the customer
and other software team members, it uses Unit testing as primary testing
• Courage: It demands courage (discipline), there is often significant pressure to design
for future requirements, XP team must have the discipline (courage) to design for
today
• Respect: XP team respect among members
The XP Process