Oose Unit Notes
Oose Unit Notes
UNIT I
SOFTWARE PROCESS AND AGILE DEVELOPMENT
Introduction to Software Engineering, Software Process, Perspective and Specialized Process
Models -Introduction to Agility-Agile process-Extreme programming-XP Process-Case Study.
WebApps (Web applications) network centric software: As web 2.0 emerges, more
sophisticated computing environments is supported integrated with remote database and
business applications.
AI: software uses non-numerical algorithm to solve complex problem. Robotics, expert
system, pattern recognition game playing
Open world computing: It is pervasive, ubiquitous, distributed computing due to wireless
networking, and allows mobile devices, personal computer, and enterprise system to
communicate across vast network.
Net sourcing: the Web as a computing engine, architect simple and sophisticated
applications to target end-users worldwide.
Open source:‖free‖ source code open to the computing community (a blessing, but also a
potential curse!)
Software Engineering Definition
Software Engineering is the application of a systematic, disciplined, quantifiable approach to the
development, operation, and maintenance of software; that is, the application of engineering to
software.
A Layered Technology
Software engineering is a layered technology. The bedrock that supports software engineering is
a quality focus. The foundation for software engineering is the process layer. The software
engineering process is the glue that holds the technology layers together and enables rational and
timely development of computer software.
Process defines a frame work that must be established for effective delivery of software
engineering technology. Software engineering methods provide the technical how-to’s for
building software. Methods encompass a broad array of tasks that include communication,
requirements analysis, design modelling, program construction, testing, and support.
Software engineering methods rely on a set of basic principles that govern each area of
the technology and include modelling activities and other descriptive techniques. Software
engineering tools provide automated or semi-automated support for the process and the methods.
Planning: Any complicated journey can be simplified if a map exists. A software project is a
complicated journey, and the planning activity creates a ―map‖ that helps guide the team as it
makes the journey. The map, called a software project plan, defines the software engineering
work by describing 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.
Modelling: Whether you’re a landscaper, a bridge builder, an aeronautical engineer, a carpenter,
or an architect, you work with models every day. You create a ―sketch‖ of the thing so that
you’ll understand the big picture, what it will look like architecturally, how the constituent parts
fit together, and many other characteristics. If required, you refine the sketch into greater and
greater detail in an effort to better understand the problem and how you’re going to solve it. A
software engineer does the same thing by creating models to better understand software
requirements and the design that will achieve those requirements.
Construction: This activity combines code generation (either manual or automated) and the
testing that is required to uncover errors in the code.
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. Software engineering process framework activities are complemented by a
number of umbrella activities. In general, umbrella activities are applied throughout a software
project and help a software team manage and control progress, quality, change, and risk. Typical
umbrella activities include:
Software project tracking and control— It allows the software team to assess progress
against the project plan and take any necessary action to maintain the schedule.
Risk management— It assesses risks that may affect the outcome of the project or the
quality of the product.
Software quality assurance— it defines and conducts the activities required to ensure
software quality.
Technical reviews— it assess software engineering work products in an effort to uncover
and remove errors before they are propagated to the next activity.
Measurement— It defines and collects process, project, and product measures that assist
the team in delivering software that meets stakeholders’ needs;
changes to government regulations). It may also occur in a limited number of new development
efforts, but only when requirements are well defined and reasonably stable.
.
Figure 1.2: 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 ongoing
support of the completed software.
2. V-model
A variation in the representation of the waterfall model is called the V-model. 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 generated, the team moves up the right side of the V, essentially
performing a series of tests (quality assurance actions) that validate each of the models created as
the team moved down the left side.In reality, there is no fundamental difference between the
classic life cycle and the V-model.
sequence produces deliverable “increments” of the software in a manner that is similar to the
increments produced by an evolutionary process flow.
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. It should be noted that the process flow for any increment can incorporate
the prototyping paradigm.
When an incremental model is used, the first increment is often a core product. That is,
basic requirements are addressed but many supplementary features (some known, others
unknown) remain undelivered. The core product is used by the customer (or undergoes detailed
evaluation). As a result of use and/or evaluation, 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.
The incremental process model focuses on the delivery of an operational product with
each increment. Early increments are stripped-down versions of the final product, but they do
provide capability that serves the user and also provide a platform for evaluation by the user.
Incremental development is particularly useful when staffing is unavailable for a complete
implementation by the business deadline that has been established for the project. Early
increments can be implemented with fewer people. If the core product is well received, then
additional staff (if required) can be added to implement the next increment. In addition,
increments can be planned to manage technical risks.
4. Evolutionary Process Models
Software, like all complex systems, evolves over a period of time. Business and product
requirements often change as development proceeds, making a straight line path to an end
product unrealistic; Two common evolutionary process models are,
prototyping
Spiral Model
Prototyping
The prototyping paradigm 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 occurs.
A quick design focuses on a representation of those aspects of the software that will be visible
to end users (e.g., human interface layout or output display formats). 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. Ideally, the prototype
serves as a mechanism for identifying software requirements.
modelling activity
(which existed in the inactive state while initial communication was completed, now makes a
transition into the under development state.
4. Application generation
In the application generation phase, the actual system is built.
To construct the software the automated tools are used.
5. Testing and turnover
The prototypes are independently tested after each iteration so that the overall testing
time is reduced.
The data flow and the interfaces between all the components are are fully tested.
Hence, most of the programming components are already tested.
Specialized Process Models
These models tend to be applied when a specialized or narrowly defined software
engineering approach is chosen.
Component-Based Development
Commercial off-the-shelf (COTS) software components, developed by vendors who offer them
as products, provide targeted functionality with well-defined interfaces that enable the
component to be integrated into the software that is to be built. The component-based
development model incorporates many of the characteristics of the spiral model. It is
evolutionary in nature demanding an iterative approach to the creation of software. However, the
component-based development model constructs applications from pre-packaged software
components. Modelling and construction activities begin with the identification of candidate
components. These components can be designed as either conventional software modules or
object-oriented classes or packages16 of classes.
The component-based development model incorporates the following steps :
Available component-based products are researched and evaluated for the
Application domain in question.
Component integration issues are considered.
Software architecture is designed to accommodate the components.
Components are integrated into the architecture.
Comprehensive testing is conducted to ensure proper functionality.
The component-based development model leads to software reuse, and reusability.
specifying, designing, and constructing aspects “mechanisms” beyond subroutines and inheritance
for localizing the expression of a crosscutting concern .
Unified Process contains four phases
Inception Phase
• Encompasses both customer communication and planning activities of the generic
process
• Business requirements for the software are identified
• A rough architecture for the system is proposed
• A plan is created for an incremental, iterative development
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
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,
troubleshooting guides, installation procedures)
• At the conclusion of this phase, the software increment becomes a usable software release
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
Introduction to Agility
Agility has become today’s buzzword when describing a modern software process.
Everyone is agile. An agile team is a nimble team able to appropriately respond to changes.
Changes in the software being built, changes to the team members, changes because of new
technology, changes of all kinds that may have an impact on the product they build or the project
that creates the product. Support for changes should be built-in everything we do in software,
something We embrace because it is the heart and soul of software. An agile team recognizes
that software is developed by individuals working in teams and that the skills of these people,
their ability to collaborate is at the core for the success of the project. In Jacobson’s view, the
pervasiveness of change is the primary driver for agility. Software engineers must be quick on
their feet if they are to accommodate the rapid changes that Jacobson describes Agility as,
It encourages team structures and attitudes that make communication (among team
members, between technologists and business people, between software engineers and their
managers) more facile.
It emphasizes rapid delivery of operational software and de-emphasizes the importance of
intermediate work products; it adopts the customer as a part of the development team and works
to eliminate the us and them‖ attitude that continues to pervade many software projects; it
recognizes that planning in an uncertain world has its limits and that a project plan must be
flexible.
It can be applied to any software process. However, to accomplish this, it is essential that
the process be designed in a way that allows the project team to adapt tasks and to streamline
them, conduct planning in a way that understands the fluidity of an agile development approach,
eliminate all but the most essential work products and keep them lean, and emphasize an
incremental delivery strategy that gets working software to the customer as rapidly as feasible for
the product type and operational environment.
Agile Process
Any agile software process is characterized in a manner that addresses a number of key
assumptions about the majority of software projects:
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.
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.
Analysis, design, construction, and testing are not as predictable (from a planning point
of view) as we might like.
Agility Principles
The Agile Alliance defines 12 agility principles for those who want to achieve agility:
Our highest priority is to satisfy the customer through early and continuous delivery of
valuable software.
b) Common focus
Although members of the agile team may perform different tasks and bring different
skills to the project, all should be focused on one goal to deliver a working software increment to
the customer within the time promised.
c) Collaboration
Software engineering is about,
Assessing, analysing, and using information that is communicated to the software team;
creating information that will help all stakeholders understand the work of the team;
Building information that provides business value for the customer.
To accomplish these tasks, team members must collaborate with one another and all other
stakeholders.
d) Decision-making ability
Any good software team must be allowed the freedom to control its own destiny. This implies
that the team is given autonomy—decision-making authority for both technical and project
issues.
e) Fuzzy problem-solving ability
Software managers must recognize that the agile team will continually have to deal with
ambiguity and will continually be buffeted by change. In some cases, the team must accept the
fact that the problem they are solving today may not be the problem that needs to be solved
tomorrow.
f) Mutual trust and respect
A jelled team exhibits the trust and respect that are necessary to make them ―so strongly knit
that the whole is greater than the sum of the parts.
g) Self-organization
In the context of agile development, self-organization implies three things:
The agile team organizes itself for the work to be done,
The team organizes the process to best accommodate its local environment,
The team organizes the work schedule to best achieve delivery of the software increment.
Extreme Programming (Xp)
XP Values
Beck defines a set of five values that establish a foundation for all work performed as part of XP
communication, simplicity, feedback, courage, and respect. Each of these values is used as a
driver for specific XP activities, actions, and tasks.
In order to achieve effective communication between software engineers and other
stakeholders XP emphasizes close, yet informal (verbal) collaboration between customers and
developers, the establishment of effective metaphors3 for communicating important concepts,
continuous feedback, and the avoidance of voluminous documentation as a communication
medium.
To achieve simplicity, XP restricts developers to design only for immediate needs, rather
than consider future needs. The intent is to create a simple design that can be easily implemented
in code. If the design must be improved, it can be refactored at a later time.
Feedback is derived from three sources:
the implemented software itself,
the customer, and
Other software team members.
By designing and implementing an effective testing strategy the software (via test results)
provides the agile team with feedback. XP makes use of the unit test as its primary testing tactic.
As each class is developed, the team develops a unit test to exercise each operation according to
its specified functionality.
As an increment is delivered to a customer, the user stories or use cases that are
implemented by the increment are used as a basis for acceptance tests. The degree to which the
software implements the output, function, and behavior of the use case is a form of feedback.
Finally, as new requirements are derived as part of iterative planning, the team provides the
customer with rapid feedback regarding cost and schedule impact.
The XP Process
Extreme Programming uses an object-oriented approach as it’s a preferred development
paradigm and encompasses a set of rules and practices that occur within the context of four
framework activities: planning, design, coding, and testing. Key XP activities are summarized as:
a) Planning
The planning activity (also called the planning game) begins with listening a
requirements gathering activity that enables the technical members of the XP team to understand
the business context for the software and to get a broad feel for required output and major
features and functionality.
Listening leads to the creation of a set of ―stories‖ (also called user stories) that describe
required output, features, and functionality for software to be built. Each story is written by the
customer and is placed on an index card. The customer assigns a value (i.e., a priority) to the
story based on the overall business value of the feature or function.5 Members of the XP team
then assess each story and assign a cost measured in development weeks to it. If the story is
estimated to require more than three development weeks, the customer is asked to split the story
into smaller stories and the assignment of value and cost occurs again.
It is important to note that new stories can be written at any time. Customers and
developers work together to decide how to group stories into the next release (the next software
increment) to be developed by the XP team. Once a basic commitment (agreement on stories to
be included, delivery date, and other project matters) is made for a release, the XP team orders
the stories that will be developed in one of three ways:
All stories will be implemented immediately (within a few weeks),
The stories with highest value will be moved up in the schedule and implemented first, or
The riskiest stories will be moved up in the schedule and implemented first.
After the first project release (also called a software increment) has been delivered, the XP team
computes project velocity. Stated simply, project velocity is the number of customer stories
implemented during the first release. Project velocity can then be used to
Help estimate delivery dates and schedule for subsequent releases and
Determine whether an over commitment has been made for all stories across the entire
development project.
As development work proceeds, the customer can add stories, change the value of an existing
story, split stories, or eliminate them. The XP team then reconsiders all remaining releases and
modifies its plans accordingly.
b) Design
XP design rigorously follows the KIS (keep it simple) principle. A simple design is
always preferred over a more complex representation. In addition, the design provides
implementation guidance for a story as it is written nothing less, nothing more.
c) Coding
After stories are developed and preliminary design work is done, the team does not move
to code, but rather develops a series of unit tests that will exercise each of the stories that is to be
included in the current release. Once the unit test has been created, the developer is better able to
focus on what must be implemented to pass the test. Nothing extraneous is added (KIS). Once
the code is complete, it can be unit-tested immediately, thereby providing instantaneous feedback
to the developers.
d) Testing
The unit tests that are created should be implemented using a framework that enables
them to be automated (hence, they can be executed easily and repeatedly). This encourages a
regression testing strategy whenever code is modified (which is often, given the XP refactoring).
As the individual unit tests are organized into a ―universal testing suite‖ integration and
validation testing of the system can occur on a daily basis. This provides the XP team with a
continual indication of progress and also can raise warning flags early if things go away.
Industrial XP
IXP is an organic evolution of XP. It is imbued with XP’s minimalist, customer-centric,
test-driven spirit. IXP differs most from the original XP in its greater inclusion of management,
its expanded role for customers, and its upgraded technical practices.‖ IXP incorporates six new
practices that are designed to help ensure that an XP project works successfully for significant
projects within a large organization. Readiness assessment: Prior to the initiation of an IXP
project, the organization should conduct a readiness assessment. The assessment ascertains
whether
an appropriate development environment exists to support IXP,
the team will be populated by the proper set of stakeholders, the organization has a
distinct quality program and supports continuous improvement,
the organizational culture will support the new values of an agile team, and
The broader project community will be populated appropriately.
Project community
Classic XP suggests that the right people be used to populate the agile team to ensure success.
The implication is that people on the team must be well-trained, adaptable and skilled, and have
the proper temperament to contribute to a self-organizing team. When XP is to be applied for a
significant project in a large organization, the concept of the “team” should morph into that of a
community.
A community may have a technologist and customers who are central to the success of a
project as well as many other stakeholders (e.g., legal staff, quality auditors, manufacturing or
sales types) who ―are often at the periphery of an IXP project yet they may play important roles
on the project‖. In IXP, the community members and their roles should be explicitly defined and
mechanisms for communication and coordination between community members should be
established.
Project chartering
The IXP team assesses the project itself to determine,
Whether an appropriate business justification for the project exists and
Whether the project will further the overall goals and objectives of the organization.
Chartering also examines the context of the project to determine how it complements,
extends, or replaces existing systems or processes.
Test-driven management
An IXP project requires measurable criteria for assessing the state of the project and the progress
that has been made to date. Test-driven management establishes a series of measurable
“destinations” and then defines mechanisms for determining whether or not these destinations
have been reached.
Retrospectives
An IXP team conducts a specialized technical review after a software increment is delivered. It is
called a retrospective, the review examines “issues”, events, and “lessons-learned” across a
software increment and/or the entire software release. The intent is to improve the IXP process.
Continuous learning
Because learning is a vital part of continuous process improvement, members of the XP team are
encouraged to learn new methods and techniques that can lead to a higher quality product. In
addition to the six new practices discussed, IXP modifies a number of existing XP practices.
Story- driven development (SDD) insists that stories for acceptance tests be written before a
single line of code is generated. Domain-driven design (DDD) is an improvement on the “system
metaphor” concept used in XP. DDD suggests the evolutionary creation of a domain model that
“accurately represents how domain experts think about their subject”
The XP Debate
All new process models and methods spur worthwhile discussion and in some instances heated
debate .Among the issues that continue to trouble some critics of XP are:
Requirements volatility: Because the customer is an active member of the XP team,
changes to requirements are requested informally. As a consequence, the scope of the project
can change and earlier work may have to be modified to accommodate current needs.
Conflicting customer needs: Many projects have multiple customers, each with his own set
of needs. In XP, the team itself is tasked with assimilating the needs of different customers, a
job that may be beyond their scope of authority.
Requirements are expressed informally: User stories and acceptance tests are the only
explicit manifestation of requirements in XP. Critics argue that a more formal model or
specification is often needed to ensure that omissions, inconsistencies, and errors are
uncovered before the system is built. Proponents counter that the changing nature of
requirements makes such models and specification obsolete almost as soon as they are
developed.
Lack of formal design: XP deemphasizes the need for architectural design and in many
instances, suggests that design of all kinds should be relatively informal.
Part A (Two Marks)
1. What is software engineering?
Software engineering is a discipline in which theories, methods and tools are applied to develop
professional software.
2. What is Software?
Software is nothing but a collection of computer programs that are related documents that are
indented to provide desired features, functionalities and better performance.
3. What are the characteristics of the software?
Software is engineered, not manufactured.
Software does not wear out.
Most software is custom built rather than being assembled from components.
4. What are the various categories of software?
System software
Application software
Engineering/Scientific software
Embedded software
5. What are the challenges in software?
Copying with legacy systems.
Heterogeneity challenge
Delivery times challenge.
6. Define software process.
Software process is defined as the structured set of activities that are required to develop
the software system.
7. What are the fundamental activities of a software process?
Specification
Design and implementation
Validation
Evolution
8. What are the umbrella activities of a software process?
Software project tracking and control.
Risk management.
Software Quality Assurance.
Formal Technical Reviews.
Software Configuration Management.
Work product preparation and production.
Reusability management.
Measurement.
9. What are the merits of incremental model?
The incremental model can be adopted when there is less number of people involved
in the project.
Technical risks can be managed with each increment.
For a very small time span, at least core product can be delivered to the customer.
10. List the task regions in the Spiral model.
Customer communication -it is suggested to establish customer communication.
Planning –All planning activities are carried out
Risk analysis –The tasks required to calculate technical and management risks.
Engineering –tasks required to build one or more representations of applications
Construct and release –tasks required to construct, test, install the applications
Customer evaluation -tasks are performed and implemented at installation stage based
on the customer evaluation.